Как я могу отображать ошибки проверки ввода CakePHP в другом месте по умолчанию? - PullRequest
20 голосов
/ 07 июня 2010

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

<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>

Я хотел бы сделать что-то вроде перемещения сообщения об ошибке div в совершенно другую часть страницы, а не помещать его внутри с тем же

, что и само поле.Какой самый простой способ сделать это?

Ответы [ 3 ]

26 голосов
/ 23 февраля 2013

Просто обновляем старый пост.

Ошибки валидации автоматически передаются для просмотра (как указал @Angel S. Moreno)

$this->validationErrors 
22 голосов
/ 08 июня 2010

В вашем контроллере :

$this->set('validationErrorsArray', $this->ModelName->invalidFields());

У вас будет $validationErrorsArray в ваших взглядах.


ОБНОВЛЕНИЕ (сентябрь 2014 г.):

С видом

Из CakePHP 2.3 вы можете получить доступ к массиву ошибок проверки из представления :

$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
}

Проверка данных с контроллера

4 голосов
/ 02 февраля 2015

Из контроллера вы можете использовать:

$this->Modelname->validationErrors['TheFieldYouWantToDisplay'] = 'This is not correct'

В вашем случае это будет так в вашем контроллере:

$this->Appointment->validationErrors['email'] = 'Error message'

Этот код просто для того, чтобы на лету сделать свое сообщение об ошибке. Но вы также можете определить $ validate в модели и сделать так, как это описал brancer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...