2013-10-01 40 views
1

在蛋糕模型中,我有6個字段都具有相同的驗證規則。有沒有辦法將此規則分配給所有6個字段,而不必複製粘貼數組?適用於很多領域的CakePHP驗證陣列

E.g.

public $currency_validate = array(
     'rule1'=>array(
      'rule' => array('comparison', '>=', 0), 
      'message' => 'Must be between 0 and 1' 
      ), 
     'rule2' => array(
      'rule' => array('comparison', '<=', 1), 
      'message' => 'Must be between 0 and 1' 
      ) 
     ); 
public $validate = array(
      'usd' => $this->currency_validate, 
      'gbp' => $this->currency_validate, 
      'eur' => $this->currency_validate, 
      //etc 
     ); 

由於不允許動態分配類中的屬性,因此不起作用。

+1

基本OOP。然後在這種情況下使用構造函數。 – mark

+0

我試過了,但如果我在我的模型中放置了一個'__construct'方法,我會得到:錯誤:調用非對象的成員函數dispatchMethod() – harryg

+0

再試一次。這絕對有可能。 –

回答

0

您可以添加規則到beforeValidate(數組$選項=陣列())方法:

public $currency_validate = array(
    'rule1'=>array(
     'rule' => array('comparison', '>=', 0), 
     'message' => 'Must be between 0 and 1' 
     ), 
    'rule2' => array(
     'rule' => array('comparison', '<=', 1), 
     'message' => 'Must be between 0 and 1' 
     ) 
    ); 
public $validate = array(
     'usd' => array(), 
     'gbp' => array(), 
     'eur' => array(), 
     //etc 
    ); 

public function beforeValidate(array $options = array()) { 
    $this->validate = array(
     'usd' => $this->currency_validate, 
     'gbp' => $this->currency_validate, 
     'eur' => $this->currency_validate, 
     //etc 
    ); 
    return true; //otherwise the current save() execution will abort 
}