• En Symfony, es muy tedioso configurar uno a uno los distintos mensajes de error al enviar un formulario.

    El método tradicional para un widget en concreto es (dentro de la clase del formulario):

    class ProductoForm extends BaseProductoForm
    {
      public function configure()
      {

         […]

         $this->validatorSchema[“email”]->setMessage(“invalid”, “El email es inválido”);

      } 

    }

    Este error solo se mostrará en el caso de que el email sea inválido y habría que hacerlo uno a uno en todos los validadores de todos los campos.

     

    Para crear un mensaje genérico para todos los widgets de cualquier formulario:

    Para esto hay que introducir el siguiente código en la clase configuration de la aplicación:

    class frontendConfiguration extends sfApplicationConfiguration{

    public function configure()
    {
      sfValidatorBase::setDefaultMessage(‘required’,’Obligatorio’);
      sfValidatorBase::setDefaultMessage(‘invalid’, ‘Inválido’);
      sfValidatorBase::setDefaultMessage(‘max_length’, “%value% es muy largo (%max_length% caracteres max.)”);
    }
    }

    De esta forma, cuando nos dejamos un campo obligatorio aparecerá el texto “Obligatorio”, en lugar de “Required”, etc.

     

    Para que este mensaje sea multiidioma:

    En ese caso primero hay que cargar el helper I18N:

    $this->loadHelpers(array(‘I18N’));

    Y así ya podemos utilizar la función de internacionalización:

    if (sfContext::hasInstance()){

      sfValidatorBase::setDefaultMessage(‘required’,__(‘Obligatorio’));

    }

    Lo de comprobar si tiene una instancia es porque sino da problemas a la hora de hacer algunas operaciones desde la línea de comandos de symfony, como limpiando caché symfony cc.