CAKEPHP3表单域不返回值


CAKEPHP3 form field not returning value

我的数据库中有一个样本表。这是我在样本表中的关联.php

$this->belongsTo('Users', [
        'foreignKey' => 'user_id',
        'joinType' => 'INNER'
      ]);

在我的 SamplesControl 中.php添加方法我正在获取当前的用户数据,如下所示:

$users = $this->Samples->Users->get($this->Auth->user('id'), [
            'keyField' => 'id',
            'valueField' => 'name'
        ]);
        $this->set(compact('sample', 'users'));

在模板/样本/中的add.ctp中,我使用此变量来显示用户名,如下所示:

echo $this->Form->input('user_id', [
            'label' => 'Client',
            'type' => 'text',
            'disabled' => true,
            'value' => $users->name,
            'required' => true,
        ]);

正确显示名称,但是当我点击提交时,它不会将用户的ID返回给控制器以将其保存在数据库中。由于我对这个框架非常陌生,所以我无法弄清楚我是否做错了什么。

我已经尝试在我的控制器添加方法中调试响应数据,但响应中没有user_id。

如果我改变

$users->name to $users 

在我的模板文件中,它在文本字段中以 JSON 格式显示有关该用户的所有数据,如下所示:

{    "id": 4,    "name": "firstname lastname",    "title": "Engineer",    "street": "122",    "city": "Lahore",    "state": "Punjab",  "email_primary": "abc@gmail.com",  "created": "2016-03-04T07:45:42+0000",    "modified": "2016-03-04T09:56:17+0000"}

如果您打算在文本框中显示登录用户的姓名,并将登录用户的 ID 保存在控制器中,则无需提取用户数据。

这确实是不必要的,并且在将用户 ID 设置为模板时可能会导致安全问题。

当您尝试访问登录用户的数据时,最好保持这种方式:

 /* For controller: */ 
 $this->Auth->user("field_name");
 /* For view: */ 
 $this->request->session()->read("Auth.User.field_name");

试试这个:

  $name =  $this->request->session()->read("Auth.User.first_name")." ".  $this->session->read()->("Auth.User.last_name"); // Add this
   echo $this->Form->input('user_id', [
        'label'    => 'Client',
        'type'     => 'text',
        'disabled' => true,
        'value'    => $name, // Add this
        'required' => true,
    ]);

在控制器中:

  if ($this->request->is("post")) {
      $this->request->data["user_id"] = $this->Auth->user("id"); // Add this
      /* Other code */
  }

希望这有帮助。

和平! xD