ユーザーがパラメーターのタイプ(お金、番号、年齢、タグIDなど)を選択すると、1つのフィールドにさまざまな目的で番号を格納できるモデルがあります。それで、私はそれを検証したいと思います、そしてモデルに私はこのフィールドが持つことができるすべてのルールを入れるべきです。ただし、パラメータタイプに依存するため、指定されたタイプ(たとえば、1000以上のお金、18〜65歳など)に従って検証する必要があります。ルールのサブセットを選択し、それを検証する方法はありますか?
1 に答える
0
検証を行う前に、コントローラーでその場でモデル検証ルールをオーバーライドできます。したがって、あなたの例では、次のようなことができます:
コントローラーで:
switch ($type) {
case "a":
$this->Model->validate = array(
// validation rules for case A
);
break;
case "b":
$this->Model->validate = array(
// validation rules for case B
);
break;
// etc
}
あるいは(そしてより良いIMHO):
モデルで代替検証ルールを設定します。
public $validateCaseA = array(
// validation rules for case A
);
public $valdayeCaseB = array(
// validation rules for case B
);
そしてあなたのコントローラーで:
switch ($type) {
case "a":
$this->Model->validate = $this->Model->validateCaseA;
break;
case "b":
$this->Model->validate = $this->Model->validateCaseB;
break;
// etc
}
または代わりに...
モデル:
public $validateCase = array(
'a'=>array(
// validation rules for case A
),
'b'=>array(
// validation rules for case A
)
//etc
);
コントローラーで:
$this->Model->validate = $this->Model->validateCase($type);
ケース ルールに共通の検証ルールがある場合は、 array_merge_recursive を使用してルール セット間の重複を減らすことができます。
モデル:
public $commonValidation = array(
//common validation rules
);
コントローラーで:
$this->Model->validate = array_merge_recursive($this->Model->commonValidation, $this->Model->validateCase($type));
于 2012-09-06T14:17:15.610 に答える