Как применить одно правило проверки для 50 полей в 2.0
я не заинтересован в повторении правила для разных полей
public $validate = array( 'company' => array( 'notempty' => array( 'rule' => array('notempty'), 'message' => 'Cannot be Empty', ), ), // rule for other 50 fields.... );
Возможное решение:
$validate_items = array('company', 'other', 'one_more'); $validate_rule = array( 'notempty' => array( 'rule' => array('notempty'), 'message' => 'Cannot be Empty') ); $validate = array(); foreach ($validate_items as $validate_item) { $validate[$validate_item] = $validate_rule; } echo "<pre>".print_r($validate, true)."</pre>";
Не понимаю, почему вы хотите определить такую же проверку 50 раз. Вы можете объявить только одно правило и использовать его для всех своих полей.
Может быть, я неправильно понял ваш вопрос?
Вы можете динамически создавать свои правила $ validate перед выполнением сохранения в вашем контроллере:
public function add () {
if (!empty($this->request->data) { $validate = array(); foreach($fields as $field) { $validate[$field] = array( 'required'=>array( 'rule'='notEmpty', 'message'=>'Cannot be empty' ) ); } $this->ModelName->validate = $validate; if (!$this->ModelName->save($this->request->data)) { // didn't save } else { // did save } }
}
Где $ fields – массив, содержащий список полей, к которым вы хотите применить проверку.
Idealy, вы переместили бы код, который строит массив проверки в модель, но эффект тот же
Вы можете применить тот же метод, чтобы позволить вам иметь несколько правил валидации для модели.
Новый пример:
$fields_to_check = array('company', 'field_2', 'field_5'); // declare here all the fields you want to check on "not empty" $errors = 0; foreach ($_POST as $key => $value) { if (in_array($key, $fields_to_check)) { if ($value == "") $errors++; } } if ($errors > 0) echo "There are ".$errors." errors in the form. Chech if all requered fields are filled in!"; //error! Not all fields are set correctly else //do some action