この問題に何度か遭遇しましたが、解決策を見つけることができず、回避策しかありませんでした。
複数の 10 個のジョブがあるとしますが、与えられた回答によって検証ルールが異なります。
foreach($jobs as $job){
if(!$this->Job->validates()){
echo 'Oh no, it didn't validate';
}
}
私が見つけた主な問題は、最初のジョブによってのみトリガーされるルールを設定した場合です。
if($this->data['Job']['type'] == 'special'){
$this->validator()->add('special_field', 'notEmpty', array(
'rule' => array('notEmpty'),
'message' => 'Please provide data'
));
}
それは他の 9 つにも適用されます。したがって、ルールは呼び出し間で永続的です。したがって、ルールが存在する場合は削除できます。
if($this->data['Job']['type'] == 'special'){
$this->validator()->add('special_field', 'notEmpty', array(
'rule' => array('notEmpty'),
'message' => 'Please provide data'
));
}else{
$this->validator()->remove('special_field', 'notEmpty');
}
ただし、ルールを削除しようとしたときにルールが存在しない場合は、Fatal Error がスローされます。
ルールを削除する前にルールが存在することを確認する方法や、beforeValidate の開始時に動的ルールをクリアする方法はありますか?