2015-06-30 19 views
1

在MembersTable.php我:CakePHP的3.0.7 - 無法調用方法「」中「默認」提供商場「member_selected」

​​

我從CakePHP的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 

如果我刪除了 - >添加(「member_selected」,[「規則」 => [「INLIST」 ...... 每一件事工作正常,但當然,驗證沒有被正確執行。我沒有一個如果使用'inList'的例子,但我想我已經正確設置了它。我還有其他幾個領域表,我必須刪除其他驗證器規則才能通過此錯誤消息(例如,自然數)。

我也會引用另一個標題爲「cakePHP 3.0.7 - 烘焙編輯功能無法執行與Marshaller :: merge()錯誤patchEntity保存保存」的問題。「

這些問題可以通過修改其中一個字段的$ validator設置來「解決」......創建這些錯誤的方法之一是更改字段名稱或類型,並忘記將其更改爲Entity $ _accessible,和函數validationDefault()內的Table $ validator。另外不要忘記$ rules->增加在表:: buildRules()

當然......爲什麼有人想改變字段名稱或類型?哦,如果cakePHP會提供一些關於實際問題的信息(期望的字段不存在,或者指定的字段不應該存在),那將會很好。

無論如何,現在我已經吹了一點點蒸氣,驗證者在爆炸時沒有報告任何有用的東西。我希望有人正在看stackoverflow,以便可以解決。

說了這麼多,我仍然想知道爲什麼'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'] 
]); 

好吧,這不是真的!你不能拋棄第二個論點!如果我總是指定第二個參數,然後第三個參數指定規則,那麼驗證過程中的所有錯誤(只要我擔心會報錯)會消失。

謝謝大家誰可以讀取,並提供援助,

回答

0

你忘了給你的規則你自己的喜好

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

我加入RULE_NAME還可以,但仍然得到這個錯誤的「名」,我創建了自定義驗證器。任何想法? –

+0

什麼錯誤?你創造了這個方法嗎? –