Tableless

Busca Menu

CakePHP convenções de nomenclatura e o poderoso Inflector!

Seja o primeiro a comentar por

Geralmente eu tenho problemas para encontrar os nomes corretos para os meus controllers, views, models e tabelas. Talvez a tarefa mais difícil de todo programador seja nomear as coisas. Quem nunca ficou indeciso por causa do nome de uma função ou de uma variável? Eu busco sempre permanecer o projeto todo em inglês.

Bem, CakePHP faz um monte de trabalho tedioso e repetitivo para você, para que você possa se concentrar melhor nas regras do negocio. Mas o CakePHP depende de você! Ele se agarrar às suas convenções de nomenclatura, por isso é importante ter atenção em nomes de tabelas, controllers, models..

Eu mesmo já tive diversos problemas com nomenclaturas e passei por muita dor de cabeça! Acredite.. O CakePHP espera que você converta corretamente esse problema entre singular, plural, etc 😉

As Models são singular. Ex: BigPerson e ReallyBigPerson são exemplos de nomes de modelos convencionais. Os nomes das tabelas correspondentes a model do CakePHP são plurais e sublinhado. As tabelas para as models acima mencionadas seriam big_people, really_big_people, respectivamente.

Aparentemente CakePHP converte substantivos irregulares corretamente e eu me pergunto: Como? Será que ela tem um look-up table enorme para todos eles? Bem, não! Em vez disso, ele faz algumas coisas muito sofisticadas em uma classe chamada cake/libs/ inflector.php,
com um monte de correspondências de regex e muito mais!

Métodos

  • pluralize: Converte para o plural: Apple, Man → Apples, Men
  • singularize: Converte para o singular: Apples, Men → Apple, Man
  • camelize: Converte underscored hadron_collider → hadronCollider
  • underscore: Converte para underscored adronCollider → hadron_collider
  • humanize: Converte unserscore para stirng com Captalize devine_intervention → Devine Intervention
  • tableize: Converte para underscore e plural MajorFeatureThing → major_feature_things
  • classify: Converte para underscore com plural para string no singular major_feature_things → MajorFeatureThing
  • variable: Converte de underscored plural ou singular para singular e lowercase. major_feature_things → majorFeatureThing
  • slug: Converte caracteres especias/espaços em underscore de qualquer formatação. Este método é UTF-8 encoding! apple purée → apple_puree

Agora que você tem uma ideia do que o Inflector pode fazer por você, vamos explorar cada um desses métodos em detalhes.

Inflector::pluralize();
O método pluralize () recebe uma palavra no singular (string) e retorna a versão plural da mesma. Aqui estão alguns exemplos:

Inflector::pluralize('Apple'); // returns "Apples"
Inflector::pluralize('Menu'); // returns "Menus"
Inflector::pluralize('News'); // returns "News"

Inflector::singularize()
O método singularize() recebe uma palavra no plural (string) e retorna a versão no singular dele. Aqui estão alguns exemplos:

Inflector::singularize('Houses'); // returns "House"
Inflector::singularize('Bananas'); // returns "Banana"
Inflector::singularize('Men'); // returns "Man"

Inflector::camelize ()

Você pode passar um método ou a ou uma palavra under_scored para o camelize () e ele
irá retornar esta palavra FooBar ou fooBar(se você passar false como o segundo argumento). Alguns exemplos:

Inflector::camelize('foo_bar'); // returns "FooBar" 
Inflector::camelize('foo_bar', false); // returns "fooBar"

Inflector::underscore()
Este o nome já diz.
O método underscore () tem basicamente uma palavra e converte os espaços dela em “_” , e também converte os caracteres especiais em caracteres normais. Ex:

Inflector::underscore('TestField') // returns test_field
Inflector::underscore('FeineApfel') // returns feine_aepfel

Este é o meu preferido!

Inflector::slug()

O método slug () recebe uma string e cria uma representação “slugged” dele.
Isto significa basicamente que todos os espaços serão substituídos por um determinado caractere (o padrão é “-“),
o que não for palavra será removido e os caracteres com acentos como “áÁéÍÓÚ” será traduzida para a sua representação ASCII.
Aqui estão alguns exemplos:

Inflector::slug('The truth - and- more- news'); // returns "the-truth-and-more-news"
Inflector::slug('!@$#exciting stuff! - what !@-# was that?'); // returns "exciting-stuff-what-was-that"

Inflector::humanize()
O método humanize () recebe uma palavra sublinhada, remove um determinado seperator (padrão para “_”) e uppercases os primeiros caracteres das palavras. Alguns exemplos dos testes principais:

Inflector::humanize('posts'); // returns "Posts"
Inflector::humanize('posts_tags'); // returns "Posts Tags"
Inflector::humanize('file_systems'); // returns  "File Systems"

Estes são os que eu achei mais importante ..
Mas se você quiser ver todos os métodos veja na documentação aqui.

Adicione suas próprias regras
Se você precisar, você pode adicionar suas próprias regras e / ou substituir regras padrão. As regras inflector::method() é responsável por isso e funciona como um setter ou getter para todas as regras armazenados. Os testes básicos proporcionam um exemplo:

Inflector::rules('singular', array('/rata/' => '\1ratus'));

Você também pode adicionar transliterações que mapeia caracteres específicos ou acentuados de linguagem para os ASCII (que são usados ​​para criar slugs, por exemplo). Os teste no core também oferecem um bom exemplo:

$this->assertNotEqual(Inflector::slug('JØRGEN'), 'JORGEN');
Inflector::rules('transliteration', array('/Ø/' => 'O'));
$this->assertEqual(Inflector::slug('JØRGEN'), 'JORGEN');

Uma boa prática é armazenar suas regras personalizadas em um arquivo de inicialização, de modo que eles estão imediatamente disponíveis para a sua aplicação quando estiver totalmente carregado.
Minha dica é criar dentro do arquivo Bootstrap =D ou até mesmo um helper..

Agora, vá! Vá e diga a todos os seus amigos sobre a sua nova descoberta! \o/

Publicado no dia