Categories: Programação

Fugindo das convenções do CakePHP 3

5/5 - (1 vote)

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.

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!

Erik Figueiredo

Designer gráfico e programador desde 2004, tem vastos conhecimentos sobre programação PHP, CakePHP, HTML5, CSS3, Javascipt, Jquery, e SEO (otimização para mecanismos de busca). Atualmente trabalha como como Freelancer para todo o Brasil e também professor de CakePHP no iMasters e MX Cursos.

Ver comentários

  • Boa noite, tenho uma duvida, na associação entre tabelas, caso seja necessario que a foreignKey ao inves de ser model_id seja cd_model, como poderia resolver?

Posts recentes

O Futuro da Criação de Sites: Integração de IA e Design Gráfico

Nos últimos anos, testemunhamos uma revolução na forma como os sites são criados, impulsionada pelo…

1 mês atrás

Como a IA Está Revolucionando a Animação 3D

A animação 3D tem sido uma forma poderosa de contar histórias e criar experiências visuais…

1 mês atrás

Lista das 20 Melhores Inteligências Artificiais em 2024 para Criação de Imagens (Todas Gratuitas)

Nos últimos anos, a inteligência artificial (IA) tem revolucionado a forma como criamos e editamos…

2 meses atrás

O Papel da Inteligência Artificial na Criação de Sites com WordPress

Nos últimos anos, a integração da inteligência artificial (IA) na criação de sites tem revolucionado…

2 meses atrás

5 Tendências em Edição de Vídeo Impulsionadas pela Inteligência Artificial

Nos últimos anos, a edição de vídeo evoluiu rapidamente com o avanço da tecnologia, e…

2 meses atrás

O Papel Revolucionário da Inteligência Artificial na Dublagem de Filmes

A dublagem de filmes desempenha um papel fundamental na indústria cinematográfica, permitindo que obras de…

2 meses atrás

This website uses cookies.