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.

Leave a Reply