cakePHP 3.0.7 - 无法在"default"提供程序中为字段"member_selected"调用方法 " "



在MembersTable.php中,我有:

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

我收到了来自cakeHP 3.0.7 的以下非常神秘的消息

Unable to call method "" in "default" provider for field member_selected" InvalidArgumentException
⟩ CakeValidationValidationRule->process COREsrcValidationValidator.php, line 656
⟩ CakeValidationValidator->_processRules COREsrcValidationValidator.php, line 136
⟩ CakeValidationValidator->errors COREsrcORMMarshaller.php, line 181
⟩ CakeORMMarshaller->_validate COREsrcORMMarshaller.php, line 428
⟩ CakeORMMarshaller->merge COREsrcORMTable.php, line 2034
⟩ CakeORMTable->patchEntity APP/ControllerMembersController.php, line 104
⟩ AppControllerMembersController->edit [internal function]
⟩ call_user_func_array COREsrcControllerController.php, line 411
⟩ CakeControllerController->invokeAction COREsrcRoutingDispatcher.php, line 114
⟩ CakeRoutingDispatcher->_invoke COREsrcRoutingDispatcher.php, line 87
⟩ CakeRoutingDispatcher->dispatch ROOTwebrootindex.php, line 37

如果我删除->add('member_selected',['rule'=>['List'。。。每件事都很正常,但当然验证没有正确进行。我并没有一个使用if"inList"的例子,但我认为我已经正确地设置了它。我必须从该表的其他几个字段中删除其他验证器规则,才能通过此错误消息(例如naturalNumber)。

我还将引用另一个stackerflow问题,题为"cakeHP 3.0.7-烘焙编辑函数无法在Marshaller::merge()错误的patchEntity中执行保存。"

可以通过更改其中一个字段的$validator设置来"解决"这些问题。。。创建这些错误的方法之一是更改字段名称或类型,而忘记在Entity$_accessible和函数validationDefault()内的Table$validator中进行更改。也不要忘记$rules->在Table::buildRules()中添加

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

无论如何,现在我已经释放了一点蒸汽,验证器在爆炸时没有报告任何有用的东西。我希望有人在看斯塔克夫流,这样它就能得到解决。

说了这么多,我仍然想知道为什么"inList"规则不起作用?

为什么inList和naturalNumber对我不起作用的答案

 add public
add( string $field , array|string $name , array|CakeValidationValidationRule $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']
]);

这不是真的!你不能忽略第二个论点如果我总是指定第二个参数,然后第三个参数指定规则,那么验证过程中的所有错误(就我而言,这些错误报告不正确)都会消失!

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

您忘记给您的规则起一个自己喜欢的"名称"

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

最新更新