我在CakePHP 3项目中有一个用于编辑用户数据的表单。在我的情况下,管理员用户可以编辑其他用户的角色。
发布表单时(由于编辑,实际请求是'PUT'),我同时获得用户的角色和ID。
请求数据:
Array
(
[role] => admin
[id] => 2
)
此传入数据完整且正确。但是,当我将数据添加到' - > newEntity'或' - > patchEntity'时,角色才能正确使用,但不会添加id。
$user = $this->Users->newEntity($this->request->data, array('validate' => 'edit'));
$user = $this->Users->newEntity();
$user = $this->Users->patchEntity($user, $this->request->data, array('validate' => 'edit'));
在上述两种情况下,我都会得到角色,但不是id。两者都给出以下数组:
Array
(
[role] => admin
)
我使用自定义验证器,因为只有id和角色需要验证才能进行编辑。
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');
$validator
->requirePresence('username', 'create')
->notEmpty('username');
$validator
->requirePresence('password', 'create')
->notEmpty('password');
$validator
->allowEmpty('role');
return $validator;
}
public function validationEdit(Validator $validator)
{
$validator
->integer('id')
->requirePresence('id')
->notEmpty('id');
$validator
->allowEmpty('role');
return $validator;
}
我尝试向'edit'验证器添加更多限制,但无论如何都不会添加id。但是正在使用'edit'验证器。将validate参数更改为“default”会给出默认验证器的所有预期错误,但仍未添加id。
我有什么明显的遗失吗?我应该是一些基本的CakePHP东西。
答案 0 :(得分:2)
您不需要newEntity来编辑现有记录,如果您正在尝试编辑用户的角色,那么就这样做:
$user = $this->Users->get($this->request->data['id']);
if ($this->request->is(['patch', 'post', 'put'])) {
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
// updated
}
}