Cauan Cabral – Geek Geek, nerd e apaixonado por tecnologia

25fev/091

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.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • StumbleUpon
  • Technorati
  • TwitThis

Sobre Cauan Cabral

Sócio-fundador da Radig - Soluções em TI (www.radig.com.br), trabalha com desenvolvimento para web há vários anos, em especial utilizando a linguagem PHP.
Comentários (1) Trackbacks (0)
  1. Para esse mesmo efeito costumo colocar o seguinte no meu AppModel:

    function invalidate($field, $value = true) {
    return parent::invalidate($field, __($value, true));
    }

    It works like a charm :-)

    [Reply]


Deixar um comentário


Sem trackbacks