3 - Convenções sobre Configurações
Você erra todo arremesso que não tenta.
Michal Jordan
A equipe do CakePHP é grande admiradora de convenção sobre configuração. Seguindo as convenções definidas pelo Cake você recebe funcionalidades gratuitamente e libera a si mesmo de manter arquivos de configuração e com isso economizamos tempo e esforço.
Aderir às convenções vai lhe poupar tempo.
Aviso Importante: Antes de começar a trabalhar com CakePHP é importante conhecer suas convenções para tirar delas as devidas vantagens. Caso não as use o CakePHP não será de muita ajuda.
Controllers
Nomes de classes tipo Controller devem estar no plural, ser CamelCase e terminarem com o sufixo Controller.
Exemplos de classes controller:
ClientesController, PeopleController e UltimosArtigosController
Actions – Os actions são os métodos dos Controllers, com visibilidade public e se comunicam com views com mesmo nome que eles e extensão .ctp.
Um exemplo: action index() - view index.ctp
o action Controller/ClientesController/index() é mapeado automaticamente para a view src/Template/Clientes/index.ctp.
Métodos protected ou private não podem ser acessados via Routing.
Considerações sobre URL para nomes de controllers
O ClientesController que está no arquivo ClientesController.php é chamado pelo navegador com:
http://localhost/aplicacao/clientes
Nomes de controllers com palavras compostas podem ficar assim:
• /vermelhaMacas
• /VermelhaMacas
• /Vermelha_macas
• /vermelha_macas
Todos resolverão com o controller VermelhaMacas.
Namespaces
Todas as classes do core do CakePHP agora (3.x) usam namespaces e seguem as especificações de autoload (auto-carregamento) do PSR-4.
Por exemplo: (troca src por Cake e troca as barras)
src/Cache/Cache.php
tem o namespace
Cake\Cache\Cache
Constantes globais e métodos de helpers como __() e debug() não usam namespaces por questões de conveniência.
Nomes de arquivos e Classes:
Classe KissesAndHugsController está no arquivo KissesAndHugsController.php
Classe ClientesController está no arquivo ClientesController.php.
Model e Bancos de Dados
Nomes de classes Table - são no plural e CamelCase
Ao nomear nosso objeto como ArticlesTable, o CakePHP automaticamente deduz que o mesmo utilize o ArticlesController e seja relacionado à tabela articles e aos Template\Articles.
O CakePHP criará automaticamente um objeto model se não puder encontrar um arquivo correspondente em src/Model/Table. Se você nomear incorretamente seu arquivo (isto é, artciclestable.php ou ArticleTable.php), o CakePHP não reconhecerá suas definições e usará o model gerado como alternativa.
Chave Primária
Toda tabela, obrigatoriamente deve ter uma chave primária e o nome da chave deve ser id para usufruir das vantagens do CakePHP.
Lembrando que o cake trabalha com nomes em inglês. Ele tem um recurso online importante para mostrar o plural de nomes:
Nomes válidos: Clientes, Populacao, GrandePopulacao e RealmenteGrandePopulacao.
Pesquisando no site acima por Clientes e People, vemos que já estão no plural e seu singular é Cliente e Person
Nomes de tabelas são em minúsculas, no plural e palavras compostas separadas por sublinhado. Nomes de tabelas para os acima:
clientes, populacao, grande_populacao e realmente_grande_populacao
A convenção é para usar tabelas e campos com nomes na língua inglesa.
Nomes de campos em minúsculas e compostos são separados por sublinhado: name, first_name.
Se usarmos os campos username e password (com estes nomes) na tabela users, o Cake deve estar apto para auto-configurar algumas coisas para nós, quando implementando o user login.
Obs.: quando usar autenticação use o tamanho do campo password com varchar(255).
Também ajuda adicionar um campo chamado role na tabela users.
Por default o Cake espera identificar o user pelos campos com nome 'username' e 'password'. Caso deseje mudar isto faça as alterações no AppController:
Adicione ao initialize():
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login',
'home',
],
//'unauthorizedRedirect' => $this->referer()
'unauthorizedRedirect' => [
'controller' => 'Users',
'action' => 'login',
'prefix' => false,
],
'authError' => 'Você não tem permissão para acessar esta área!',
'flash' => [
'element' => 'error',
],
'authenticate' => [
'Form' => [ // THIS IS WHERE YOU CHANGE THE DEFAULT FIELDS
'fields' => ['username' => 'novoUsername', 'password' => 'novoPassword'],
],
],
]);
Relacionamentos
Chave estrangeira nos relacionamentos hasMany, belongsTo ou hasOne são reconhecidas por default com:
nome da tabela relacionada no singular seguida de "_id".
Exemplos: groups e users. Em users o campo group_id para relacionar.
Relacionamento entre articles e users. Em articles adicionar o campo user_id.
Relacionamento Muitos para Muitos
Exemplo: Para relacionamento muitos para muitos das tabelas pratos com cozinheiros, criaremos uma tabela intermediária para relacionar pratos com cozinheiros:
create table cozinheiros_pratos(
id int unsigned auto_increment primary key,
cocinero_id int(11) not null,
platillo_id int(11) not null
);
Tipos de Relacionamentos
one to one |
hasOne |
Um usuario tem um perfil. |
one to many |
hasMany |
Um usuario pode ter múltiplos artigos. |
many to one |
belongsTo |
Muitos artigos pertencem a um usuario |
many to many |
belongsToMany |
Várias Tags pertencem a muitos artigos. |
Para uma classe Bakers teremos uma chave estrangeira assim: baker_id.
Para uma tabela como category_types a chave estrangeira será category_type_id.
Nomes de campos especiais, que levam o Cake a tomar iniciativas importantes a nosso favor:
title
name
created
modified
Convenções para as Views
As views tem nomes de arquivos em minúsculas com extensão .ctp.
O método getReady() do conroller PeopleController está associado ao template/view
src/Template/People/get_ready.ctp.
O método index() do controller ClientesController está associado a
src/Template/Clientes/index.ctp.
Arquivos da Aplicação
Todos os arquivos da aplicação que criamos ficam na pasta src.
Criptografia
Por padrão o CakePHP 3.x usa a criptografia bcrypt para proteger as senhas. Uma recomendação, quando usamos bcrypt é que o tamanho do campo password deve ter 255 caracteres na tabela, para que suporte o tamanho do hash gerado.
Arquivos da Aplicação
Todos os arquivos da aplicação que criamos ficam na pasta src.
Por padrão o CakePHP 3.x usa a criptografia bcrypt para proteger as senhas.
Alterando convenções
Recomenda-se evitar, mas caso necessite veja abaixo um exemplo
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class ClientesTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->table('clientes'); // Nome da tabela. Se ausente a convenção assume uma versão em minúsculas do prefixo deste arquivo: ClientesTable.php
$this->displayField('cpf'); // campo usado por default na exibição em models associados, se ausente é assumido 'id'
$this->primaryKey('id'); // Campo Primary key da table, se ausente a convenção assume que seja o campo 'id'
$this->addBehavior('Timestamp'); // Permite ao model gravar timestamp na creation/modification dos registros
}
}
Documentação oficial
http://book.cakephp.org/3.0/pt/intro/conventions.html
Comments fornecido por CComment