2013-10-01 3 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

Basic OOP. Тогда используйте конструктор. – mark

+0

Я пробовал это, но если я положу метод '__construct' в своей модели, я получаю: Ошибка: вызов функции-члена dispatchMethod() для не-объекта – harryg

+0

Попробуйте еще раз. Это определенно возможно. –

ответ

0

Вы можете добавить правила в в beforeValidate (массив параметров $ = Array()) метод:

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 
} 
Смежные вопросы