Vamos falar um pouco sobre outro plugin para CakePHP que surgiu no coração da Radig: o Locale.
Meu amigo José Agripino já apresentou o plugin no próprio blog da Radig, mas como reescrevi quase que totalmente o plugin nos últimos dias, acredito ser a hora de falar dele novamente.
Nada melhor para ver a utilidade de algo como imaginar uma situação de uso real, então vamos lá…
Cenário 1: você desenvolve um sistema para brasileiros, e quer permitir a entrada de informações em formato local, isto é, datas com dia/mês/ano e números com vírgula separando decimais. O problema é que estes dados são inválidos em um banco de dados convencional (como MySQL e PostgreSQL). Ao tentar salvar uma data formatada com dia/mês/ano você receberá um erro como resposta. Como resolver isso? Use o behavior Locale no seu modelo.
Basta adicionar o behavior Locale no modelo que ele fará a conversão de datas e números para o formato americano.
public $actsAs = array('Locale.Locale');
É possível converter automaticamente datas, datas acompanhadas de horas e decimais/floats.
Cenário 2: você já tem os dados do seu usuário armazenados no banco (formato padrão/americano) e quer apresenta-los em um formato local na sua View, o que fazer? Use o Helper Locale em sua view. Primeiro ative o helper no seu controller:
public $helpers = array('Locale.Locale');
Agora basta usa-lo na view:
echo $this->Locale->date($this->data['User']['birthday']);
É possível formatar data, data com hora, data literal (quarta-feira 18 de abril de 2012, por exemplo), decimais como 53,42 e valores monetários ( R$ 53,42 ).
Além do Behavior e do Helper, você pode carregar as libs Localize e Unlocalize em qualquer parte de seu sistema para converter entre os dois diferentes formatos. As libs são estáticas e suportam aninhamento de método, assim você pode fazer:
echo Localize::setLocale('pt_BR')->decimal(12.45); // 12,45
A unica configuração necessária é a definição do locale de sua aplicação, que pode ser feito no próprio bootstrap.php do Cake:
setlocale(LC_ALL, 'pt_BR');
Assim como outros plugins da Radig, você pode consultar os testes incluídos para ver melhor o funcionamento deste.
Se for utilizar, nos avise, será uma grande satisfação ver que o plugin é util para outros.
Há uma versão compatível com o CakePHP 1.3 e outra com o CakePHP 2.x, basta usar o branch correspondente.
Tentei usar o Locale (banch 2.0) no cake 2.1.3 e só aparece
“Missing Plugin
Erro: The application is trying to load a file from the Locale plugin”
Alguma dica?
obrigado
Isso é um erro do próprio CakePHP quando um Plugin não é encontrado. Você instalou como o plugin? Na pasta ./Plugin/Locale ?
Não, apenas coloquei os arquivos nas pastas igual a estrutura de pastas baixadas do Github.
Coloquei o setlocale no bootstrap
ao colocar no model:
public $actsAs = array(‘Locale.Locale’);
já aparece o erro
Se você não salvou ele como um Plugin, então ao chamar ele (tanto o Behavior quanto o Helper) você não deve colocar o primeiro Locale nome.
Fica somente: $actsAs = array(‘Locale’);
Quando usamos a notação com ponto, o CakePHP entende como sendo uma pasta dentro da pasta Plugin (por isso Locale.Locale, significa Behavior Locale, dentro da pasta Locale em Plugin).
Ótimo, agora me achei aqui…
Coloquei todo conteudo dentro de Plugin/Locale
No Config/bootstrap.php setlocale
E no model coloquei
public $actsAs = array(‘Locale.Locale’);
Muito obrigado pela ajuda e parabéns pelo excelente plugin.
Abraço
Olá Cauan, cara estou implementando um sistema e estou tentando colocar um código teu em prática, mais estou perdido, é o Módulo de integração do cakephp com o pagseguro, que encontrei no Github, lá os códigos do módulo estão escritos como Libs, mas não importa como eu faça o CakePHP fica me pedindo ele como um Plugin, coloquei todos os arquivos nos mesmos diretórios como aparecem, porém ele me pede “CakePlugin::load(‘PagSeguro’);”, por favor cara, me da uma luz