当数据中缺少字段时,为什么'notEmpty'规则不适用?

问题描述 投票:0回答:1

我正在尝试为新创建的实体创建验证,但是实体对象在此处的代码中未包含任何错误:

模型类别:

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

    $validator
        ->integer('status')
        ->notEmptyString('status');

和控制器:

$data = ['data' => "test"];

    $ticket = $this->Tickets->newEntity($data);

结果:

object(Cake\ORM\Entity) {

'data' => 'test',
'[new]' => true,
'[accessible]' => [
    '*' => true
],
'[dirty]' => [
    'data' => true
],
'[original]' => [],
'[virtual]' => [],
'[hasErrors]' => false,
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Tickets'

}

我认为默认设置是使用validationDefault,并且错误字段必须包含错误,因为未设置“ status”。但“错误”字段始终为空,如果我调用“保存”功能,则该实体将保存到数据库。

我该如何解决?

validation cakephp cakephp-3.x
1个回答
0
投票

这不是“ 非空”规则的工作方式,它们不需要字段为,仅要求该字段为非空,仅以防万一存在。当该字段不存在时,空规则(或与此相关的任何其他规则)将根本不适用,即,这会使您的规则失败:

[ 'status' => '' ]
如果要强制使用当前字段,请使用requirePresence规则,例如:

$validator ->requirePresence('status', 'create') ->notEmptyString('status') ->integer('status');

这里的顺序并不重要,因为存在和空检查是按照固定顺序执行的,即先进行存在检查,然后是空检查,然后再执行所有其他规则,但是恕我直言,当顺序为电话反映了这一点。

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.