Показать все ошибки проверки модели в верхней части страницы в cakePHP

Я новичок в CakePHP. Когда я использую Model Field Validations он показывает сообщение об ошибке в каждом поле необходимой формы. Я хочу показать его в div в верхней части формы. Как я могу это реализовать. Заранее спасибо. Вот мой код: Модель:

 <?php class User extends AppModel { public $validate = array( 'username' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A username is required' ), array( 'rule' => array('minLength', 8), 'message' => 'Username must be at least 6 characters long' ) ), 'password' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A password is required' ) ), 'city' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A City is required' ) ), 'state' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A State is required' ) ), 'role' => array( 'valid' => array( 'rule' => array('inList', array('admin', 'author')), 'message' => 'Please enter a valid role', 'allowEmpty' => false ) ) ); } 

UsersController.php

 public function add() { $this->set('states_options', $this->State->find('list', array('fields' =>array('id','name') ))); $this->set('cities_options', array()); if ($this->request->is('post')) { $this->User->set($this->request->data); if($this->User->validates()) { $this->User->create(); if ($this->User->save($this->request->data)) { $this->Session->setFlash(__('The user has been saved')); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The user could not be saved. Please, try again.')); } } else { $errors = $this->User->validationErrors; $this->set('ValidateAjay',$errors); //pr($errors);die; } } } 

Пользовательский вид:

 <!--<script src="http://code.jquery.com/jquery-1.7.2.js"></script>--> <script> $(document).ready(function(){ $('#UserState').change(function(){ var stateid=$(this).val(); $.ajax({ type: "POST", url: "checkcity", data:'stateid='+stateid+'&part=checkcity', success: function(data) { $("#city_div").html(data); } }); }); }); </script> <div class="users form"> <?php if(!empty($ValidateAjay)){ pr($ValidateAjay); } echo $this->Form->create('User'); ?> <fieldset> <legend><?php echo __('Add User'); ?></legend> <?php echo $this->Form->input('username'); echo $this->Form->input('password'); echo $this->Form->input('state', array('options' => $states_options , 'empty' => 'Select State' )); ?> <div id="city_div"> <?php echo $this->Form->input('city', array('options' => $cities_options, 'empty' => 'Select City' )); ?> </div> <?php echo $this->Form->input('role', array( 'options' => array('admin' => 'Admin', 'author' => 'Author') )); ?> </fieldset> <?php echo $this->Form->end(__('Submit')); ?> </div> 

Вы можете получить все ошибки проверки из переменной $this->validationErrors на представлении. Тогда не стесняйтесь проходить через них и показывать, как вам нравится. Они будут организованы по модели, например:

 array( 'User' => array( 'username' => 'This field cannot be empty.', 'password' => 'This field cannot be empty.' ) ); 

Затем вы можете перебирать их на экране и отображать их как таковые. В этом примере они отображаются как неупорядоченный список:

 $errors = ''; foreach ($this->validationErrors['User'] as $validationError) { $errors .= $this->Html->tag('li', $validationError); } echo $this->Html->tag('ul', $errors); 

Наконец, вы можете скрыть автоматические сообщения об ошибках помощника формы, сокрыв их с помощью CSS или установив по умолчанию параметры FormHelper, чтобы их не показывать.

CSS

 .input.error { display: none; } 

или

в представлении

 $this->Form->inputDefaults(array( 'error' => false )); 

Пример jeremyharris имеет большой смысл, однако, если вы не хотите вручную устанавливать цикл для каждого поля формы, вы можете попробовать следующее:

 $errors = ''; foreach($this->validationErrors as $assoc) { foreach ($assoc as $k => $v) { $errors .= $this->Html->tag('li', $v); } } echo $this->Html->tag('ul', $errors); 

Поэтому, если ваша проверка возвращает несколько ошибок, результат будет выглядеть так:

  - A username is required - A password is required