我的数据库中有一个样本表。 这是我在 SamplesTable.php
中的协会$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
在我的 SamplesControler.php 添加方法中,我获得了这样的当前用户数据:
$users = $this->Samples->Users->get($this->Auth->user('id'), [
'keyField' => 'id',
'valueField' => 'name'
]);
$this->set(compact('sample', 'users'));
在Template / Samples / i中的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"}
答案 0 :(得分:0)
如果您打算在文本框中显示登录用户的姓名并将登录用户的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