Inflections no CakePHP
Estou desenvolvendo bastante coisa com a ajuda do Cake, e hoje me deparei com uma coisa que há algum tempo venho tentando evitar de fazer.
Estou desenvolvendo um aplicativo em Português, e criei um model chamado Album. Até aqui tudo bem, a não ser pelo fato do Cake flexionar (ou pluralizar) para usar a tabela como Albums, logicamente seguindo o inglês.
Bom, como eu não tava muito afim de usar umas gambis, editando o routes.php, resolvi mexer no inflections.
Eu adicionei duas regras, pois Album segue um padrão de pluralização semelhante a Jovem, por exemplo.
Então primeiro precisei criar uma regra para pegar do singular e passar pro plural, editei a seguinte regra no ../app/config/inflections.php
Assim, o Cake reconhecerá todas as palavras terminadas com m e usará ns no fim delas.
Tive que adicionar também a regra inversa a essa, que no caso passa uma palavra no plural para o singular.
Assim podemos manter um padrão legal nos nomes das tabelas e dos controles de nossa aplicação se ela for em português.
Até a próxima pessoal...

bybartus said,
Janeiro 9, 2007 @ 12:38
Poxa, tava passando por isso agora a pouco, justamente com 'albums', hehe.. mas acabei usando o routes mesmo. Vou ver melhor como funciona o inflections, valeu pela dica
Tiago Bega said,
Janeiro 12, 2007 @ 23:06
Po legal esta dica, meu ingles é horrivel estava procurando por uma solução pra isso.
No meu caso o nome da tabela era Atletas ficava atletum rs
horrivel e ainda causava erros.
Rodrigão said,
Junho 28, 2007 @ 22:00
caramba, galileu da galileia! essa dica veio na hora certa . . .meu sistema tem a tabela professor, que acabou ficando professors, muito bom mesmo, bacana ver que o cake tem suporte a adaptações quando a sua solução não satisfaz.
parabéns pela dica!
Carlos said,
Julho 12, 2007 @ 16:07
Tambem estava passando pelo mesmo problema.
Dica 100%
Zeniel said,
Julho 26, 2007 @ 09:15
Muito bom meu velho!
Eu tava dando um vacilo, tava achando que era no esquema de plural irregular.
Bill said,
Janeiro 7, 2008 @ 17:13
hehe, me quebrou um belo galho com esta dica.
Abraços amigo
Fernando said,
Janeiro 30, 2008 @ 11:53
Opa...estou com um problema um pouco mais complexo. Preciso criar um cadastro de notas fiscais. Seguindo as "Cake conventions":
O nome da minha tabela é notas_fiscais;
Em relação ao modelo, o nome do arquivo fica nota_fiscal.php e o nome do modelo NotaFiscal;
Em relação ao controle, o nome do arquivo fica notas_fiscais_controller.php e o nome do controle NotasFiscaisController;
Mas com certeza tem que adicionar algo no inflections.php
O Cake diz que não está encontrando o model
Estou certo na nomenclatura?
Como adicionar no inflections.php?
Alguém pode me ajudar?
Desde já agradeço.
Abraço.
Tulio Faria said,
Janeiro 30, 2008 @ 19:57
Fernando,
a nomenclatura não está correta. O Cake flexiona o fim da palavra, ou seja, model NotaFiscal teria uma tabela nota_fiscais e um controller nota_fiscais (para usar esse model por padrão).
Se seu controller chama: notas_fiscais ele espera um model NotasFiscal.
Espero ter respondido sua pergunta.
Att e valeu a todos pelos comentários.
Fernando said,
Fevereiro 1, 2008 @ 17:20
Obrigado pela resposta Túlio.
Fiquei confuso pelos exemplos citados em http://manual.cakephp.org/appendix/conventions
Mas de qualquer forma vou precisar codificar algo no inflections.php não?
Pois o plural de fiscal é fiscais. Ou seja, troca o "l" pelo "is"...certo?
Grato.
Tulio Faria said,
Fevereiro 2, 2008 @ 16:29
Olá Fernando,
da forma que está explicado neste post. Ou seja:
e:
Inté...
Fernando said,
Fevereiro 4, 2008 @ 15:56
Valeu cara!
Porém, nesse último post, eu me expressei mal. Na pressa esqueci de comentar algumas coisas sobre a questão.
Nos exemplos citados em http://manual.cakephp.org/appendix/conventions eles citam o nome de um arquivo de controle "composto": kisses_and_hugs_controller.php cujo nome do controle é KissesAndHugsController, onde pela teoria deve-se flexionar a palavra Kiss e a palavra Hug em relação à pluralização. Outro exemplo de nome de controle "composto" no manual do cake é ReallyNiftyThing. Mas nesse caso entendo que não há preocupação pois deve-se flexionar somente a palavra Thing.
Mas como fazer no primeiro caso, onde o nome do controle é KissesAndHugsController. É um caso semelhante ao meu, onde o nome do controle é composto: NotasFiscaisController
A não ser que eu esteja viajando, e na verdade o controle KissesAndHugsController está controlando dois modelos: o modelo Kiss e o modelo Hug
O que acha?
Mas de qualquer forma, parabéns pelo Blog!!! Tá muito bom e me ajudando muito!!!
Tulio Faria said,
Fevereiro 5, 2008 @ 16:23
Olá Fernando,
creio que os exemplos no manual são apenas para exemplificar os nomes dos controllers. Não fazem referência direta ao nome dos models destes controllers.
Nada impede de um KissesAndHugsController use qualquer model, inclusive um chamado KissesAndHug. Se ele carregasse automaticamente os dois model's isso estaria explÃcito no manual, pois seria bem interessante.
De qualquer forma, só testando para saber
Vou procurar fazer isso.... Para saber se há essa possibilidade....
Obrigado pelo elogio e pela observação....
Att,
Henrique said,
Abril 25, 2008 @ 02:11
Opa! Eu estava com esse problema tb e acabei achando esse blog.
No meu caso era solucao => solucaos :/
Acabei encontrando uma contribuicao do Sadjow Medeiros Leão:
Um inflections com todas (?) as regras para portugues! segue o link:
http://manual.cakephp.com.br/doku.php?id=inflections_portugues
Abraço!
Eduardo said,
Maio 2, 2008 @ 17:32
Olá.
Para o caso de excessões as regras que colocamos em singleRules e pluralRules, podemos colocar as excessões da seguinte forma:
$irregularPlural = array('manifestacao'=>'manifestacoes', 'solucao'=>'solucoes');
e por ai vai.
abs.
Andre Encinas said,
Maio 21, 2008 @ 23:54
ola Túlio Parabéns antes de mais nada,..........mas estou com uma dúvida segui o post fiz as alterações mas na hora de criar o model via bake ele transforma a minha tabela paises para paise e como se ele estivesse ignorando o inflections do app.....estou usano o cake12
obrigado!