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.