Cakephp 3 - newEntity / patchEnity不使用提供的id

时间:2016-11-22 22:22:37

标签: php validation cakephp cakephp-3.0

我在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东西。

1 个答案:

答案 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
        }
     }