0

この問題に何度か遭遇しましたが、解決策を見つけることができず、回避策しかありませんでした。

複数の 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 の開始時に動的ルールをクリアする方法はありますか?

4

2 に答える 2

0

興味深い問題です。

私はこれをテストしていませんが、使用できるようです:

$this->validator()->remove('special_field');

フィールドのすべてのルールを削除します。

于 2013-07-31T13:05:03.567 に答える