2011-12-24 88 views
0

如何在任何視圖中驗證更多操作,如創建用戶或編輯器。 想要在不同的行動中有更多不同的規則。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

你的問題沒有任何意義,也沒有細節。您目前使用哪些代碼,以及您嘗試執行哪些操作? – 2011-12-25 04:12:53

+0

希望這將有助於更好的瞭解 – webfacer 2011-12-25 13:22:31

回答

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

不,它不工作它必須工作,但其他方式,但我不知道如何...解決這個問題,變量不在控制器的任何地方定義這就是爲什麼它贏得了我所能做的就是每次都從控制器驗證,但我確實希望將所有內容都保存在模型中的一個區域,當它工作時它會很酷。那是我從cakephp站點獲得的信息[「控制器驗證」](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 2012-01-02 14:03:35

+0

在模型中設置驗證數組。然後在控制器中,根據要使用的規則集更改驗證數組。如果您需要動態創建規則,則在您的模型中創建一個函數,該函數將構建一個規則數組,然後將其應用於validate變量。 – 2012-01-02 15:25:05

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

您可以使用行爲在上面的鏈接使用這樣的:

在您的型號中:

var $actsAs = array('Multivalidatable'); 

var $validate = array( 
      //your default validation set here 
); 

var $validationSets = array(
     'firstSet' => array(
       //your first set of validation rules here 
         ), 
     'secondSet' => array(
       //your second set of validation rules here 
          )); 

然後在另存行動之前你的控制器選擇適當的驗證設置

$this->Modelname->setValidation('firstSet');