{"id":1446,"date":"2015-05-25T19:12:59","date_gmt":"2015-05-25T22:12:59","guid":{"rendered":"https:\/\/www.mxcursos.com\/blog\/?p=1446"},"modified":"2019-03-27T01:37:18","modified_gmt":"2019-03-27T04:37:18","slug":"fugindo-das-convencoes-do-cakephp-3","status":"publish","type":"post","link":"https:\/\/www.mxcursos.com\/blog\/fugindo-das-convencoes-do-cakephp-3\/","title":{"rendered":"Fugindo das conven\u00e7\u00f5es do CakePHP 3"},"content":{"rendered":"<p>Fala pessoal, sou Erik Figueiredo e sou professor aqui no MX Cursos, to passando pra deixar uma dica pra quem usa o CakePHP.<\/p>\n<p>Eu sempre pego algu\u00e9m\u00a0 afirmando &#8220;e<em>u n\u00e3o gosto do CakePHP por causa das conven\u00e7\u00f5es&#8221;<\/em>, eu particularmente gosto de regras, me amarrei nas PSRs, mas tem hora que n\u00e3o da n\u00e9, e nestas horas precisamos dominar a ferramenta para podermos quebrar as regras.<\/p>\n<h2>Conven\u00e7\u00f5es no CakePHP 3<\/h2>\n<p>No CakePHP 3 as conven\u00e7\u00f5es s\u00e3o<\/p>\n<ul>\n<li>Model no plural e em CamelCase<\/li>\n<li>Controller no plural e em CamelCase<\/li>\n<li>Nome do diret\u00f3rio de templates no plural e em CamelCase<\/li>\n<li>Table no plural e em CamelCase<\/li>\n<li>Entidade no singular e em CamelCase<\/li>\n<li>Tabela do banco de dados no plural e tudo min\u00fasculo com underline entre as palavras<\/li>\n<\/ul>\n<p>Pois \u00e9 justamente ali na entidade que a coisa pega, mas porque? Parece simples, afinal.<\/p>\n<ul>\n<li>barco-&gt;barcos<\/li>\n<li>pessoa-&gt;pessoas<\/li>\n<li>homem-&gt;homens<\/li>\n<\/ul>\n<p>Mas ai que voc\u00ea se engana, \u00e9 plural e singular no idioma ingl\u00eas!<\/p>\n<ul>\n<li>boat-&gt;boats<\/li>\n<li>person-&gt;people<\/li>\n<li>man-&gt;men<\/li>\n<\/ul>\n<p>E isso dificulta pra muita gente, j\u00e1 que, segundo as regras do CakePHP, valor seria valors em vez de valores.<\/p>\n<p>Vamos resolver isso?<\/p>\n<h2>Ignorando as conven\u00e7\u00f5es de relacionamento<\/h2>\n<p>Pois bem, em primeiro lugar vamos supor que voc\u00ea tenha o controller PeopleController e que usar a tabela wdr_people_cake, e por algum motivo n\u00e3o possa usar um nome diferente, n\u00e3o vamos discutir isso, voc\u00ea n\u00e3o pode mudar e pronto.<\/p>\n<p>Agora leve em conta que segundo as conven\u00e7\u00f5es ter\u00edamos:<\/p>\n<ul>\n<li>Tabela (banco): people<\/li>\n<li>Entity: Person<\/li>\n<li>Table: PeopleTable<\/li>\n<li>Controller: PeopleController<\/li>\n<li>Diret\u00f3rio de template: People<\/li>\n<\/ul>\n<p>Precisamos trocar o nome da tabela do banco, podemos fazer isso no Table assim:<\/p>\n<pre class=\"line-numbers\">&lt;?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-&gt;table('wdr_people_cake');\r\n    }\r\n\/*...*\/\r\n<\/pre>\n<p>Dentro do m\u00e9todo initialize() eu troquei o nome da tabela usando o m\u00e9todo $this-&gt;table(), agora que tal n\u00e3o usar id como chave prim\u00e1ria, em vez disso usaremos person_id (um padr\u00e3o que eu n\u00e3o recomendo, mas como disse, \u00e9 assim que eu preciso e pronto).<\/p>\n<pre class=\"line-numbers\">&lt;?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-&gt;table('wdr_people_cake');\r\n        $this-&gt;primaryKey('person_id');\r\n    }\r\n\/*...*\/\r\n<\/pre>\n<p>Lembram quando falei que a entidade \u00e9 no singular? Eu n\u00e3o quero isso, quero usar People tamb\u00e9m.<\/p>\n<pre class=\"line-numbers\">&lt;?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-&gt;table('wdr_people_cake');\r\n        $this-&gt;primaryKey('person_id');\r\n        $this-&gt;entityClass('App\\Model\\Entity\\People');\r\n    }\r\n\/*...*\/\r\n<\/pre>\n<p>Note que eu passei um namespace dentro do m\u00e9todo $this-&gt;entityClass(), voc\u00ea pode apontar isso para onde quiser e do jeito que quiser (desde que siga a PSR-4), eu mantive o padr\u00e3o do CakePHP, ou seja, dentro de src\/Model\/Entity, f\u00e1cil n\u00e3o?<\/p>\n<p>Uma \u00faltima dica pra quem quer personalizar a sa\u00edda do display field (sabe quando voc\u00ea da um list e vem id e o titulo, o display field \u00e9 o t\u00edtulo).<\/p>\n<pre class=\"line-numbers\">&lt;?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-&gt;table('wdr_people_cake');\r\n        $this-&gt;primaryKey('person_id');\r\n        $this-&gt;entityClass('App\\Model\\Entity\\People');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;displayField('title');\r\n    }\r\n\/*...*\/\r\n<\/pre>\n<p>Simples.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>\u00c9 isso, se voc\u00ea \u00e9 daqueles que gosta de declarar tudo do seu jeito, o CakePHP tamb\u00e9m serve pra voc\u00ea, ou deixe tudo de acordo com as conven\u00e7\u00f5es e deixe o CakePHP trabalhar, agora que voc\u00ea sabe o caminho das pedras \u00e9 s\u00f3 escolher como quer fazer.<\/p>\n<h2>Onde estudar mais<\/h2>\n<p>Tenho alguns links pra voc\u00ea, tem links com conte\u00fado pr\u00eamio, mas tamb\u00e9m tem links com conte\u00fado gr\u00e1tis, todos ricos em informa\u00e7\u00e3o.<\/p>\n<ul>\n<li><a href=\"https:\/\/mxcursos.com\/curso-de-cakephp-3-essencial?tracking=blog&amp;utm_source=blog&amp;utm_medium=post_link&amp;utm_content=marketing\" target=\"_blank\" rel=\"noopener noreferrer\">Curso de CakePHP 3 Essencial<\/a><\/li>\n<\/ul>\n<p>Um abra\u00e7o!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00e9m\u00a0 afirmando &#8220;eu n\u00e3o gosto do CakePHP por causa das conven\u00e7\u00f5es&#8221;, eu particularmente gosto de regras, me amarrei nas PSRs, mas tem hora que n\u00e3o da n\u00e9, e nestas [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":18254,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1178],"tags":[1184,1185],"class_list":["post-1446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao","tag-cakephp","tag-php"],"_links":{"self":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/1446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/comments?post=1446"}],"version-history":[{"count":0,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/1446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media\/18254"}],"wp:attachment":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media?parent=1446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/categories?post=1446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/tags?post=1446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}