Blog do 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?

Nossos cursos indicados

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.

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:

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).

table('wdr_people_cake');
        $this->primaryKey('person_id');
    }
/*...*/

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

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).

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.

Aonde estudar mais

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

E tem mais cursos meus aqui no Mx Cursos