【问题标题】:Model return me "_required" error on field that it's not empty Cake php 3.8模型在字段上返回“_required”错误,它不是空的 Cake php 3.8
【发布时间】:2020-11-28 22:56:10
【问题描述】:

我使用 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);

非常感谢您的帮助,

洛伊克

【问题讨论】:

  • 您能否向我们展示您的型号代码中与is_active 相关的所有验证规则?
  • @GregSchmidt 是的,我已经更新了我的帖子
  • 我们怎么知道这个字段实际上是修补数据的一部分?创建实体的代码是什么样的? ps,请尽量避免将代码发布为图片 - 谢谢!
  • @ndm 因为我在声明我的实体时直接放了这个,所以我用代码编辑了我的帖子。如您所见,我的“is_active”属性是我的实体的一部分
  • 它是您实体的一部分,但不一定是您修补数据的一部分,即它可能不存在于$this->getRequest()->getData() 中?如果实际上不可能从用户数据中修补它,那将是有道理的,但它会导致您显示的问题。

标签: php cakephp cakephp-3.0


【解决方案1】:

您在上面进行了两次修补,错误由您的第二次“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);

在您的情况下,原因是: 您正在设置“on create”规则进行验证。 但是无论你多久打补丁,它仍然没有被保存,所以同样的验证规则会一次又一次地被触发。

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多