0

ユーザーがパラメーターのタイプ(お金、番号、年齢、タグIDなど)を選択すると、1つのフィールドにさまざまな目的で番号を格納できるモデルがあります。それで、私はそれを検証したいと思います、そしてモデルに私はこのフィールドが持つことができるすべてのルールを入れるべきです。ただし、パラメータタイプに依存するため、指定されたタイプ(たとえば、1000以上のお金、18〜65歳など)に従って検証する必要があります。ルールのサブセットを選択し、それを検証する方法はありますか?

4

1 に答える 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 に答える