Don't you speak portuguese? Translate this site with Google Translator

Pensamento do Dia

Tornas - te eternamente responsável por aquele que cativas. (Saint - Exupéry)

3 - Convenções sobre Configurações

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:

http://inflector.cakephp.org/

 

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

Novo Testamento

Para que tome parte neste ministério e apostolado, de que Judas se desviou, para ir para o seu próprio lugar.
(At, 1:25)

Rotas no Mapa do Google

© 2015 Ribamar FS. All Rights Reserved. Designed By JoomShaper