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

Saudações! Eu tenho regularmente problemas para encontrar os nomes corretos para os meus controllers, views, models e tabelas. E busco 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 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(‘FeineÄpfel’)// 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/


Originally published at greensolucoes.com.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.