CakePHP 3.x 在提供 'return false' 时未给出验证错误

CakePHP 3.x not giving validation error when 'return false' supplied

这个问题在某种程度上延续了我之前询问的关于在 Cake 3.x 应用程序中执行搜索时实施验证的问题:

我一直在阅读 Using Custom Validation Rules 上的文档。

我已将以下内容添加到我的 Model/Table/EcsTable.php 中:

public function validationSearch($validator)
{
    $extra = 'Some additional value needed inside the closure';
    $validator->add('value', 'custom', [
    'rule' => function ($value, $context) use ($extra) {
        return false;
    },
    'message' => 'The title is not valid'
    ]);
    return $validator;
} 

这是文档中给出内容的副本,但我添加了 return false 因为我正在尝试测试产生错误的验证方法。

在我的控制器中,我有以下内容:

$ecs_entity = TableRegistry::get('Ecs')->newEntity(
$this->request->getData(),
[
    'validate' => 'search', // tells cake to use validateSearch
]
);

我无法生成验证错误。如果我提交我的表单(以便提交请求数据)然后执行 debug($ecs_entity); errors 属性 是一个空数组:

object(Cake\ORM\Entity) {
    'ecs' => [
        'value' => '124'
    ],
    // ...
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Ecs'
}

这是为什么?我计划在 validationSearch 内的闭包内编写逻辑,以验证传递的数据。但是,我什至无法让它产生错误,所以还没有走到这一步。我是不是以错误的方式实现了它?

根据最初的问题,我正在尝试以正确的方式 "Cake way" 编写验证。我已经到了认真考虑放弃它的地步,只是将所有内容都放在控制器中,因为传递数据非常乏味 - 并且当我可以在控制器中验证它时涉及更多代码行.

您传递给 newEntity 调用的数据格式无效。

看起来你正在传递类似

的东西
    [
        'ecs' => [
            'value' => 123 
        ] 
    ]

什么时候应该是:

[ 'value' => 123  ]

debug valid Ecs 实体的输出应该如下所示:

object(Cake\ORM\Entity) {

    'value' => '123',
    '[new]' => true,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [
        'value' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Esc'

}

如你所见value是一个直接属性的对象。

没有看到你的 Form 我可以猜到你已经创建了它:

$this->Form->control( 'ecs.value')

而不是

$this->Form->control( 'value' );