Marco Zend:configurando un campo de formulario Zend_Form_Element como obligatorio, ¿cómo cambio el validador utilizado para garantizar que el elemento no esté en blanco?

StackOverflow https://stackoverflow.com/questions/34848

  •  09-06-2019
  •  | 
  •  

Pregunta

Cuando se utiliza un Zend_Form, la única forma de validar que una entrada no quede en blanco es hacer

$element->setRequired(true);

Si esto no está configurado y el elemento está en blanco, me parece que la validación no se ejecuta en el elemento.

Si uso setRequired(), al elemento se le asigna automáticamente el validador NotEmpty estándar.El problema es que el mensaje de error con este validador apesta: "El valor está vacío, pero se requiere un valor que no esté vacío".Quiero cambiar este mensaje.Por el momento he hecho esto cambiando el Zend_Validate_NotEmpty clase, pero esto es un poco complicado.

Lo ideal sería poder utilizar mi propia clase (derivada de Zend_Validate_NotEmpty) para realizar la comprobación de que no está vacío.

¿Fue útil?

Solución

Lo hice de esta manera (ZF 1.5):

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
     ->setRequired(true)
     ->addFilter('StripTags')
     ->addFilter('StringTrim')
     ->addValidator($MyNotEmpty);

entonces, addValidator() es la parte interesante.El mensaje se establece en un "Archivo de mensajes de error" (para agrupar todos los mensajes personalizados en un solo archivo):

$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);

espero que esto ayude...

Otros consejos

De forma predeterminada, setRequired(true) le dice a isValid() que agregue una validación no vacía si aún no existe uno.Dado que esta validación no existe hasta que se llama a isValid(), no puede configurar el mensaje.

La solución más sencilla es simplemente agregar manualmente una validación NonEmpty antes de llamar a isValid() y configurar su mensaje en consecuencia.

$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
         ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));

Agregue un validador NotEmpty y agregue su propio mensaje:

// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired();  // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
    'messages' => array(
        'isEmpty' => 'my localized err msg')));

Nota que el validador NotEmpty no parece activarse a menos que también hayas llamado a setRequired() en el elemento.

En el controlador (o donde sea), llame a $form->setTranslator($yourTranslator) para localizar el mensaje de error cuando se imprime en la página.

Cambiar el mensaje de error.

Hasta donde puedo ver Cambiando el mensaje de error no tiene forma de cambiar el mensaje de un error específico.Además, el manual hace que parezca que se trata de una función que pertenece a Zend_Form, pero obtengo el método no encontrado cuando lo uso en una instancia de Zend_Form.

Y un ejemplo del uso sería realmente genial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top