web-dev-qa-db-fra.com

Comment puis-je afficher des erreurs de validation d'entrée CakePHP dans un endroit différent de la valeur par défaut?

Disons que j'ai un champ qui ressemble à ceci à la vue:

<li class="bigfield">
  <?php echo $form->input('phone', array(
      'placeholder' => 'Phone',
      'label' => false,
      'between' => '<br />'
  )); ?>
</li>

Si j'ai une règle de validation sur ce champ et la validation échoue, je vois le HTML suivant:

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

Je tiens à faire quelque chose comme Déplacer le message d'erreur DIV dans une autre partie différente de la page plutôt que de l'avoir à l'intérieur avec le même <li> comme le champ lui-même. Quelle serait la façon la plus directe de faire cela?

20
Nick Messick

Je viens de mettre à jour un ancien post.

Les erreurs de validations sont automatiquement transmises à la vue (comme indiqué par @angel S. Moreno)

$this->validationErrors 
27
Kishor Kundan

dans votre contrôleur :

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

Tu vas avoir $validationErrorsArray Dans votre point de vue.


Mise à jour (septembre 2014):

à partir de la vue

De CakePHP 2.3, vous pouvez accéder au tableau d'erreurs de validation à partir de vue :

$this->validationErrors;

à partir du contrôleur

Si vous avez essayé de sauvegarder des données dans le contrôleur, vous pouvez accéder aux erreurs de validation de cette façon:

$this->ModelName->validationErrors;

Si vous souhaitez valider des données avant d'économiser le faire de cette façon:

$this->ModelName->set($this->request->data);
if ($this->ModelName->validates()) {
    $this->ModelName->save();
} else {
    $errors = $this->ModelName->validationErrors;
    // handle errors
}

Validation des données du contrôleur

22
bancer

Du contrôleur, vous pouvez utiliser:

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

Dans votre cas, ce serait comme ça dans votre contrôleur:

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

Ce code est juste de créer un message d'erreur personnalisé à la volée. Mais vous pouvez également définir $ Valider dans le modèle et le faire comme la manière dont Rancer l'a décrit.

4
shaw kwok