2011-07-04 11 views
0

(これはCakePHPの新機能ですが、これは明らかなことかもしれませんが、2時間後に解決策を見つけることができませんでした。 "or"のあいまいな性質です。 ...)CakePHP検証 - isUnique OR inList

私はそれがisUniqueルールまたはinListルールのいずれかを満たすの値について検証するように、isUniqueルールを使用する既存のCakePHPのバリデーションルールを変更しようとしています。

前のコード:

'isUnique' => array(
    'rule' => 'isUnique' , 
    'message' => "We're sorry, but this QA number is already being used.", 
    'last' => TRUE, 
), 

マイ(故障した)コード:

'isUnique' => array(
    'rule' => array( 
    'isUnique' , 
    array('inList' , array('111213' , '141516' , '171819' , '202122')) 
) , 
    'message' => "We're sorry, but this number is already being used.", 
    'last' => TRUE, 
), 

ので、(このような単純なようなものであってもよい)、どのように一緒に "とあなたの文字列CakePHPのバリデーションルールすることができますOR "論理演算子? 「AND」ルールのカスケードを適用できることがわかります(特定の問題のテストごとに、そのテストに失敗した場合は値を拒否します)。「OR」ルールは私の頭を傷つけます...

助けていただければ幸いです。

答えて

2

custom validation ruleにする必要があります。お使いのモデルでこれを追加:あなたは聖人だ

'rule' => array('isUniqueOrInList', array('111213', '141516', '171819', '202122')) 
+0

public function isUniqueOrInList(array $data, array $list) { return in_array(current($data), $list) || $this->isUnique($data); } 

は、次にようなあなたのルールを宣言!あなたの助けてくれてありがとう - 私のCakePHPへの最初の進出、私は無知だったので。パフォーマンスの理由から –

+2

私は2つの条件を切り替えるでしょう。後者はDBコールを必要としません – mark

+0

@mark良い点。あなたは、日付の検証のように 'allowEmpty' を使用しようとするかもしれ – deceze