php zend-framework zend-form

php - Zend_Form-> Cambia muy bien setRequired() validate message



zend-framework zend-form (10)

Digamos que creo un elemento de texto como este:

$firstName = new Zend_Form_Element_Text(''firstName''); $firstName->setRequired(true);

¿Cuál es la mejor manera de cambiar el mensaje de error predeterminado de:

El valor está vacío, pero se requiere un valor no vacío

a un mensaje personalizado? Leí en alguna parte que para reemplazar el mensaje, simplemente use addValidator (..., en su lugar (NO setRequired) , como este:

$firstName = new Zend_Form_Element_Text(''firstName''); $firstName->addValidator(''NotEmpty'', false, array(''messages''=>''Cannot be empty''));

pero en mi prueba, esto no funciona, no valida en absoluto , pasará con un campo de texto vacío. El uso de ambos (addValidator (''NotEmp .. + setRequired (true)) al mismo tiempo tampoco funciona: valida en doble , dando dos mensajes de error.

¿Algunas ideas?

¡Gracias!


Dale una oportunidad:

$firstName = new Zend_Form_Element_Text(''firstName''); $firstName->setLabel(''First Name'') ->setRequired(true) ->addValidator(''NotEmpty'', true) ->addErrorMessage(''Value is empty, but a non-empty value is required.'');

La clave es que "verdadero" en el validador si establece eso en verdadero, matará las otras validaciones después de él. Si agrega más de un método de validación, pero lo establece en falso, validará todos los métodos.


Pero prueba esto:

$firstName->setRequired(true) ->addValidator(''NotEmpty'', false, array(''messages'' => ''bar'')) ->addValidator(''Alpha'', false, array(''messages''=>''Must contain only letters''));

Si se deja en blanco y se envía, dará dos mensajes de barra y '' '' es una cadena vacía . Es ese segundo mensaje que viene de setRequired (true) ese es el problema


Prueba esto..

$ausPostcode = new Zend_Form_Element_Text(''aus_postcode''); $ausPostcode->setLabel(''Australian Postcode'') ->setRequired(true) ->addValidator(''StringLength'', false, array(4, 4)) ->addValidator(new Zend_Validate_Digits(), false) ->getValidator(''digits'')->setMessage(''Postcode can only contain digits'');

Esto establece el mensaje de error personalizado solo para el validador de dígitos.


Prueba lo siguiente.

$subjectElement->setRequired(true)->addErrorMessage(''Please enter a subject for your message'');

Esto funcionó de mí.


Si pones:

$element->setRequired(false);

las validaciones no funcionan en absoluto, debe definir:

$element->setAllowEmpty(false);

para obtener el comportamiento correcto de las validaciones.


Tratar

->addValidator(''Digits'', false);

o

->addValidator(''Digits'');

Usted asume que para verificar los dígitos debe tener una longitud de cadena de todos modos.

Además, me gusta hacer algunos mensajes de error personalizados como este:

$firstName->getValidator(''NotEmpty'')->setMessage(''Please enter your first name'');

Esto le permite "obtener" el validador y luego "configurar" sus propiedades.


Un pequeño problema. Este código:

$zipCode->setLabel(''Postal Code'') ->addValidator(''StringLength'', true, array( 5, 5 ) ) ->addErrorMessage(''More than 5'') ->addValidator(''Digits'', true) ->addErrorMessage(''Not a digit'');

Generará ambos mensajes de error si falla la validación. ¿No se supone que se detiene después de que el primero falla?


Una manera más fácil de establecer este "sitio" sería posiblemente hacer lo siguiente en un programa de arranque o tal vez un zend_controller base:

<?php $translateValidators = array( Zend_Validate_NotEmpty::IS_EMPTY => ''Value must be entered'', Zend_Validate_Regex::NOT_MATCH => ''Invalid value entered'', Zend_Validate_StringLength::TOO_SHORT => ''Value cannot be less than %min% characters'', Zend_Validate_StringLength::TOO_LONG => ''Value cannot be longer than %max% characters'', Zend_Validate_EmailAddress::INVALID => ''Invalid e-mail address'' ); $translator = new Zend_Translate(''array'', $translateValidators); Zend_Validate_Abstract::setDefaultTranslator($translator); ?>


Zend_Form establece el error de validación requerido como ''isEmpty'', por lo que puede anular su mensaje utilizando setErrorMessages (). Por ejemplo:

//Your Required Element $element->setRequired(true)->setErrorMessages(array( ''isEmpty''=>''Please fill this field'' ));

Funcionó para mí, usando ZF 1.11


utiliza un traductor zend con zend_validate.php de

ZendFramework-1.11.3/resources/languages/en/Zend_Validate.php and then modify this file how you need

y luego modificarlo según sus necesidades