cakePHP 3.0.7 - 无法调用 "default" 字段 "member_selected" 提供程序中的方法“”

cakePHP 3.0.7 - Unable to call method "" in "default" provider for field "member_selected"

在MembersTable.php我有:

    $validator
        ->notEmpty('member_selected')
        ->add('member_selected', ['rule' => ['inList', [0,1], false]]);

    return $validator;

我从 c​​akePHP 3.0.7 收到以下非常神秘的消息

Unable to call method "" in "default" provider for field member_selected" InvalidArgumentException

⟩ Cake\Validation\ValidationRule->process CORE\src\Validation\Validator.php, line 656
⟩ Cake\Validation\Validator->_processRules CORE\src\Validation\Validator.php, line 136
⟩ Cake\Validation\Validator->errors CORE\src\ORM\Marshaller.php, line 181
⟩ Cake\ORM\Marshaller->_validate CORE\src\ORM\Marshaller.php, line 428
⟩ Cake\ORM\Marshaller->merge CORE\src\ORM\Table.php, line 2034
⟩ Cake\ORM\Table->patchEntity APP/Controller\MembersController.php, line 104
⟩ App\Controller\MembersController->edit [internal function]
⟩ call_user_func_array CORE\src\Controller\Controller.php, line 411
⟩ Cake\Controller\Controller->invokeAction CORE\src\Routing\Dispatcher.php, line 114
⟩ Cake\Routing\Dispatcher->_invoke CORE\src\Routing\Dispatcher.php, line 87
⟩ Cake\Routing\Dispatcher->dispatch ROOT\webroot\index.php, line 37

如果我删除 ->add('member_selected', ['rule' => ['inList' ... 一切正常,但当然验证没有正确完成。我没有使用 if 'inList' 的示例,但我认为我已经正确设置了它。我有这个 table 的其他几个字段,我必须从中删除其他验证器规则才能通过此错误消息(例如 naturalNumber)。

我还将参考另一个标题为 "cakePHP 3.0.7 - Baked edit function fails to perform save in patchEntity with Marshaller::merge() error."

的 Whosebug 问题

问题可能是 "resolved" 通过更改其中一个字段的 $validator 设置...造成这些错误的方法之一是更改字段名称或类型,而忘记在实体中更改它$_accessible,以及函数 validationDefault() 中的 Table $validator。也不要忘记 $rules->adds in Table::buildRules()

当然...为什么会有人想要更改字段名称或类型?哦,好吧,如果 cakePHP 能提供一些关于实际问题的信息(期望的字段不存在,或者指定的字段不应该存在),那就太好了。

无论如何,现在我已经发泄了一点,验证器在崩溃时没有报告任何有用的信息。我希望有人在看Whosebug所以它可以解决。

说了这么多,我还是想知道为什么 'inList' 规则不起作用?

回答为什么 inList 和 naturalNumber 对我不起作用!

 add public

add( string $field , array|string $name , array|Cake\Validation\ValidationRule $rule [] )

Adds a new rule to a field's rule set. If second argument is an array then rules list for the field will be replaced with second argument and third argument will be ignored.
Example:

$validator
->add('title', 'required', ['rule' => 'notBlank'])
->add('user_id', 'valid', ['rule' => 'numeric', 'message' => 'Invalid User'])

$validator->add('password', [
'size' => ['rule' => ['lengthBetween', 8, 20]],
'hasSpecialCharacter' => ['rule' => 'validateSpecialchar', 'message' => 'not valid']
]);

好吧,这不是真的!你不能省略第二个参数! 如果我总是指定第二个参数然后第三个参数指定规则,验证期间的所有错误(就我而言是错误报告的)都会消失!

感谢所有可能阅读并提供帮助的人,

您忘记给您的规则一个'name'您自己喜欢的

->add('member_selected', 'rule_name', ['rule' => ['inList', [0,1], false]]);