2010-06-07 14 views
19

Digamos que tengo de campo que tiene este aspecto en la vista:¿Cómo puedo mostrar los errores de validación de entrada de CakePHP en un lugar diferente?

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

Si tengo una regla de validación en este campo y no pasa la validación, veo el código HTML siguiente:

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

I' Me gusta hacer algo así como mover el mensaje de error div a una parte completamente diferente de la página en lugar de tenerlo dentro con el mismo <li> como el campo en sí. ¿Cuál sería la forma más directa de hacer esto?

Respuesta

25

Acaba de actualizar una publicación anterior.

las validaciones errores se transmiten automáticamente a la vista (como señala @AnGEl S. Moreno)

$this->validationErrors 
20

In you controller:

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

Tendrá $validationErrorsArray en sus puntos de vista.


ACTUALIZACIÓN (septiembre de 2014):

Desde el punto de vista

De CakePHP 2.3 se puede acceder a los errores de validación de la gama view:

$this->validationErrors; 

Desde el controlador

Si se trató de guardar los datos en el controlador puede acceder a los errores de validación de esta manera:

$this->ModelName->validationErrors; 

Si desea validar los datos antes de guardar hacerlo de esta manera:

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

Validating Data from the Controller

+2

Debe tenerse en cuenta que en CakePHP 2.x este valor se envía automáticamente a la vista –

+1

Atención: Esta respuesta es incorrecta si ya usó save() etc para validar sus datos ya que esto volverá a validarlo. Simplemente use $ this-> Form-> error() en su vista. – mark

+0

Fui estudiado 3 veces y cargué 3 veces en mucho tiempo. Ahora tengo que manejar 2 proyectos y parece un nuevo marco.Gracias por su respuesta^_ ^ – TommyDo

3

De controlador que puede utilizar:

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

En su caso sería como este en su controlador:

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

este bacalao e es solo para crear un mensaje de error personalizado sobre la marcha. Pero también puede definir $ validate en el modelo y hacerlo como lo describió brancer.

Cuestiones relacionadas