CakePHP – Dúvidas Comuns #2
Dúvida: Como usar habilitar a internacionalização - o famoso I18N - nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views?
Habilitar a internacionalização e ter a localização em uma aplicação com CakePHP desde a versão 1.2 é relativamente simples: basta uma lida no nosso Cookbook e pronto.
Outra coisa que é relativamente simples de se fazer é validar os dados, basta termos um atributo em nosso modelo chamado "validate" e seguir as dicas do livro de receitas.
Mas pelo Cookbook somos induzidos a fornecer a mensagem de erro na hora de criar a View, algo que eu particularmente não gosto. É até comum termos um modelo que é usado por Controllers diferentes e consequêntemente por Views diferentes.
Uma maneira de evitar isso, é definir as mensagens de erro já na definição das regras de validação, dentro do atributo "validate" do seu modelo. O grande problema é que para traduzir uma determinada expressão utilizamos um método, e a chamada de método na definição estática de um atributo não é permitida no PHP (dúvida? tente fazer o código abaixo)
class Modelo extends AppModel { var $validate = _('ola mundo'); } //esse código não devera ser executado
A solução para isso é a atribuição das regras de validação no momento da instanciação da classe, ou seja, no seu método construtor, da seguinte maneira
class Modelo extends AppModel { var $validate; function __construct(){ parent::__construct(); $this->validate = array( /* aqui você pode definir as regras e mensagens,mesmo chamando um método */ ); } }
Qualquer dúvida não deixem de utilizar os comentários ;]
--------
Atualizado: havia esquecido da chamada ao construtor da superclasse AppModels ( através do parent::__construct() ) no último código mostrado.



