2011-12-24 16 views
0

ユーザの作成やeditigの作成など、どのようなビューでもより多くのアクションを検証する方法。 異なるアクションでより多くの異なるルールを使用したいと考えています。CakePHP 2.0ユーザモデル:複数のアクションを検証する方法

私はこのような例として、私のモデルで私の検証を使用します。

<? 

    App::uses('AuthComponent', 'Controller/Component'); 

    class User extends AppModel { 

     public $name  = 'User'; 

     public $primaryKey = 'id'; 

     public $validate = array(

      'username' => array( 
       'first'=>array(
        'rule'=>'notEmpty', 
        'message'=>'Your username is empty!', 
        'last'=>true 
       ), 
       'second'=>array(
        'rule'=>'isUnique', 
        'message'=>'the username is already taken!' 
       ) 
      ), 

      'password' => array(
       'rule'  => 'notEmpty', 
       'message' => 'Your password is empty!' 
      ) 

     ); 



     public function beforeSave() { 

      if(isset($this->data[$this->alias]['password'])) { 
       $this->data['User']['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
      } 
      return true; 
     } 

    } 

?> 

しかし、私はのような他の方法で検証を使用するさまざまなアクションがあります。中

 'username' => array( 
      'first'=>array(
       'rule'=>'notEmpty', 
       'message'=>'Your username is empty!', 
       'last'=>true 
      ), 
      'second'=>array(
       'rule'=>array('minlength',5), 
       'message'=>'The Username is to short!' 
      ) 
     ), 

     'password' => array(
      'rule'  => 'notEmpty', 
      'message' => 'Your password is empty!' 
     ) 

    ); 

を同じモデルで、同じコントローラーでこれが可能です。

+0

を設定します。あなたは現在どのようなコードを使用していますか、あなたは何をしようとしていませんか? –

+0

これはより良い理解のために役立つことを願っています – webfacer

答えて

0

ご質問ありがとうございます。あなたが求めていることを理解したので、これは良い質問です。

これが可能で今日テストする時間がないのか分かりませんが、$validate変数が公開されているので、必要に応じてコントローラに設定する必要があります。したがって、その場でルール・アレイを作成することができます。あるいは、モデルに組み込んだ事前定義済みのルール・アレイを簡単に割り当てることができます。

$validationRulesOne = array(
    //Create the first set of validation rules 
); 

$validationRulesTwo = array(
    //Create the second set of validation rules 
); 

次に、あなたのコントローラのアクションでは、バリデータを呼び出す前に設定し、検証を設定します。

//Action 1 
$this->User->validate = $validationRulesOne; 
$this->User->validate(); 

//Action 2 
$this->User->validate = $validationRulesTwo; 
$this->User->validate(); 
+0

いいえそれは動作していませんが、それ以外の方法ではありませんが、私はどのように...この問題を解決するために変数はコントローラのどこにでも定義されていません私ができることは、コントローラーから毎回検証することですが、モデルの1つの領域にすべてを保持して、動作するようになるとクールになるようにします。それはcakephpサイトから入手した情報です。["controller validate"](http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller)html) ["model validate"](http://book.cakephp.org/2.0/en/models/data-validation.html) – webfacer

+0

モデル内の検証配列を設定します。コントローラで、使用するルールのセットに基づいて検証配列を変更します。動的にルールを作成する必要がある場合は、モデルにルール配列を作成してそれをvalidate変数に適用する関数を作成します。 –

1

もう一度検索し、ステップごとにドキュメントを読むことで、別の解決策が見つかりました。

ここにオプションへのリンク:あまりにもon

このヘルプこのオプションでを作成更新を区別することができますので。モデルから

例:

public $validate = array(

     'username' => array( 
      'first' =>array(
       'rule'  =>'notEmpty', 
       'message' =>'Sie haben den Produktnamen nicht eingetragen!', 
       'last'  =>true, 
       'on'  =>'update' 
      ), 
      'second' =>array(
       'on'  => 'create', 
       'rule'  =>'isUnique', 
       'message' =>'Der Username ist bereits vergeben!' 
      ), 
     )); 

私はそれを試してdidn'tまだこれは

1

http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

を動作するはずですあなたはこのようなものを使用して上記のリンクで動作を使用することができると思います:

モデル内:

保存アクションが選択する前

は、その後、あなたのコントローラーにあなたの適切な検証があなたの質問は意味がないと何も詳細がない

$this->Modelname->setValidation('firstSet'); 
関連する問題