cakephp 模型返回给我“_required”错误字段,它不是空的Cake php 3.8

sz81bmfz  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(175)

我使用cakephp 3.8,我想保存我的实体在我的会话表,但是,模型返回给我一个错误,我不明白,因为你可以在屏幕截图上看到,我的“is_active”字段不是空的,她的值是真的.

这是我的模型中的验证规则:

public function validationDefault(Validator $validator)
{
    $validator
        ->integer('id')
        ->allowEmpty('id', 'create');

    $validator
        ->scalar('name')
        ->maxLength('name', 255)
        ->requirePresence('name', 'create')
        ->notEmpty('name');

    $validator
        ->boolean('is_active')
        ->requirePresence('is_active', 'create')
        ->notEmpty('is_active');

    return $validator;
}

这是我的密码

$session = $this->Sessions->newEntity(['session_state_id' => 'OPENED', 'section_id' => $section_id, 'is_active' => true]);
$this->Sessions->patchEntity($session, $this->getRequest()->getData());
$this->Sessions->save($session);

非常感谢你的帮助,
卢瓦

j13ufse2

j13ufse21#

你打了两次补丁,第二次“patchEntity()"会触发错误。修复你的代码,我会说不要打两次补丁,或者在数据中包含该字段,或者调整你的验证规则。
一般来说,每次“创建”和“编辑”都只打一次补丁。所以,在上面,你应该做的是:

$data = $this->getRequest()->getData();
$data['is_active'] = true; // add fields on top for the same marshalling.
...

$session = $this->Sessions->newEntity($data);
$result = $this->Sessions->save($session);

创建操作的替代方法(需要实体来构建表单时):

$session = $this->Sessions->newEmptyEntity(); // this one doesn't patch.
$ession->is_active = true; // Add fields directly (no validation)

$data = $this->getRequest()->getData();
$data['...'] = ... // If needed for validation

$session = $this->Sessions->patchEntity($session, $data);
$result = $this->Sessions->save($session);

在您的案例中,原因是:您正在设置“创建时”验证规则。但无论您多久打一次补丁,它仍然没有保存,因此同一个验证规则会被一次又一次地触发。

相关问题