MX Cursos

Fugindo das convenções do CakePHP 3

Fugindo das convenções do CakePHP 3

Fala pessoal, sou Erik Figueiredo e sou professor aqui no MX Cursos, to passando pra deixar uma dica pra quem usa o CakePHP.

Eu sempre pego alguém  afirmando “eu não gosto do CakePHP por causa das convenções”, eu particularmente gosto de regras, me amarrei nas PSRs, mas tem hora que não da né, e nestas horas precisamos dominar a ferramenta para podermos quebrar as regras.

Convenções no CakePHP 3

No CakePHP 3 as convenções são

  • Model no plural e em CamelCase
  • Controller no plural e em CamelCase
  • Nome do diretório de templates no plural e em CamelCase
  • Table no plural e em CamelCase
  • Entidade no singular e em CamelCase
  • Tabela do banco de dados no plural e tudo minúsculo com underline entre as palavras

Pois é justamente ali na entidade que a coisa pega, mas porque? Parece simples, afinal.

  • barco->barcos
  • pessoa->pessoas
  • homem->homens

Mas ai que você se engana, é plural e singular no idioma inglês!

  • boat->boats
  • person->people
  • man->men

E isso dificulta pra muita gente, já que, segundo as regras do CakePHP, valor seria valors em vez de valores.

Vamos resolver isso?

Ignorando as convenções de relacionamento

Pois bem, em primeiro lugar vamos supor que você tenha o controller PeopleController e que usar a tabela wdr_people_cake, e por algum motivo não possa usar um nome diferente, não vamos discutir isso, você não pode mudar e pronto.

Nossos cursos online relacionados a este post

Agora leve em conta que segundo as convenções teríamos:

  • Tabela (banco): people
  • Entity: Person
  • Table: PeopleTable
  • Controller: PeopleController
  • Diretório de template: People

Precisamos trocar o nome da tabela do banco, podemos fazer isso no Table assim:

<?php namespace App\Model\Table; use App\Model\Entity\Person; /** * People Model */ class PeopleTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config) { $this->table('wdr_people_cake');
    }
/*...*/

Dentro do método initialize() eu troquei o nome da tabela usando o método $this->table(), agora que tal não usar id como chave primária, em vez disso usaremos person_id (um padrão que eu não recomendo, mas como disse, é assim que eu preciso e pronto).

<?php namespace App\Model\Table; use App\Model\Entity\Person; /** * People Model */ class PeopleTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config) { $this->table('wdr_people_cake');
        $this->primaryKey('person_id');
    }
/*...*/

Lembram quando falei que a entidade é no singular? Eu não quero isso, quero usar People também.

<?php namespace App\Model\Table; /** * People Model */ class PeopleTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config) { $this->table('wdr_people_cake');
        $this->primaryKey('person_id');
        $this->entityClass('App\Model\Entity\People');
    }
/*...*/

Note que eu passei um namespace dentro do método $this->entityClass(), você pode apontar isso para onde quiser e do jeito que quiser (desde que siga a PSR-4), eu mantive o padrão do CakePHP, ou seja, dentro de src/Model/Entity, fácil não?

Uma última dica pra quem quer personalizar a saída do display field (sabe quando você da um list e vem id e o titulo, o display field é o título).

<?php namespace App\Model\Table; /** * People Model */ class PeopleTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config) { $this->table('wdr_people_cake');
        $this->primaryKey('person_id');
        $this->entityClass('App\Model\Entity\People');
        $this->displayField('title');
    }
/*...*/

Simples.

Conclusão

É isso, se você é daqueles que gosta de declarar tudo do seu jeito, o CakePHP também serve pra você, ou deixe tudo de acordo com as convenções e deixe o CakePHP trabalhar, agora que você sabe o caminho das pedras é só escolher como quer fazer.

Onde estudar mais

Tenho alguns links pra você, tem links com conteúdo prêmio, mas também tem links com conteúdo grátis, todos ricos em informação.

Um abraço!

Clube de Cursos Clube de Cursos

Conheça nosso Clube de Cursos e potencialize suas habilidades em Produção e Edição de Vídeos, Design, Marketing Digital, Programaço, WordPress, 3D e Modelagem, Motion Graphics e muito mais!

CONHEÇA O CLUBE