Ответ 1
Просто обновление старого сообщения.
Ошибки проверки автоматически передаются для просмотра (как указал @Angel S. Moreno)
$this->validationErrors
Скажем, у меня есть поле, которое выглядит следующим образом:
<li class="bigfield">
<?php echo $form->input('phone', array(
'placeholder' => 'Phone',
'label' => false,
'between' => '<br />'
)); ?>
</li>
Если у меня есть правило проверки в этом поле и проверка не выполняется, я вижу следующий HTML:
<li class="bigfield">
<div class="input text required error">
<br>
<input name="data[Appointment][email]" type="text" placeholder="Email"
maxlength="45" value="" id="AppointmentEmail" class="form-error">
<div class="error-message">Please enter a valid email address</div>
</div>
</li>
Мне нравится делать что-то вроде переноса сообщения об ошибке на всю другую часть страницы, а затем внутри внутри с тем же <li> как само поле. Каким будет самый прямой способ сделать это?
Просто обновление старого сообщения.
Ошибки проверки автоматически передаются для просмотра (как указал @Angel S. Moreno)
$this->validationErrors
$this->set('validationErrorsArray', $this->ModelName->invalidFields());
В ваших представлениях будет $validationErrorsArray
.
ОБНОВЛЕНИЕ (сентябрь 2014 г.):
С точки зрения
В CakePHP 2.3 вы можете получить доступ к массиву ошибок проверки из view:
$this->validationErrors;
Из контроллера
Если вы попытались сохранить данные в контроллере, вы можете получить доступ к ошибкам проверки следующим образом:
$this->ModelName->validationErrors;
Если вы хотите проверить данные перед сохранением, сделайте так:
$this->ModelName->set($this->request->data);
if ($this->ModelName->validates()) {
$this->ModelName->save();
} else {
$errors = $this->ModelName->validationErrors;
// handle errors
}
Из контроллера вы можете использовать:
$this->Modelname->validationErrors['TheFieldYouWantToDisplay'] = 'This is not correct'
В вашем случае это будет похоже на ваш контроллер:
$this->Appointment->validationErrors['email'] = 'Error message'
Этот код предназначен для создания пользовательского сообщения об ошибке "на лету". Но вы также можете определить $validate в модели и сделать это так, как описал ее бранц.