Doctrine ORM — Naming strategy
Atualmente possuímos diversas padronizações definidas pela comunidade do PHP, as famosas PSR. Claro, temos uma também para padronizar a forma que escrevemos o código em nossa aplicação, a PSR-2.
Hoje vou falar um pouco sobre naming strategy, uma configuração simples que pode fazer toda a diferença para você manter padronizações entre código-fonte PHP x Banco de dados.
O que é o naming strategy do Doctrine
Basicamente com naming strategy, conseguimos definir os padrões de nomenclaturas no banco de dados de acordo com nossa necessidade. O Doctrine já possui embarcado a opção de implementar naming strategy de underscore, podem é possível criar implementações customizadas de acordo com sua necessidade.
Porque usar naming strategy no Doctrine
- Mantem o código-fonte padronizado de acordo com as regras de padronização utilizada;
- Elimina a necessidade de especificar sempre o nome do campo quando a variável for diferente do padrão necessitado pelo banco de dados;
- Mantem a compatibilidade do Doctrine com o banco de dados.
Regras de padronização do PHP para nomes de variaveis
No “PSR-2”, as variáveis devem ser escritas em underscore ou camel case, desde que uma vez adotado um estilo o mesmo seja utilizando em todo o projeto. Em outras palavras, o projeto não pode conter variáveis underscore e camelcase, somente um estilo ou outro.
No “symfony”, padrão de codificação que trata-se de uma mistura do PSR-2 com mais implementações de boas práticas para desenvolvimento de bundles para o Symfony, as variáveis devem ser escritas em camel case obrigatoriamente. Vale lembrar que este padrão não exclusivo do Symfony e cada vez mais está tomando o lugar do PSR-2 independente de qual sistema ou framework que está sendo implementado no projeto.
Implementando o naming strategy do Doctrine ORM
Nativo(Sem framework)
No exemplo abaixo, estamos implementando o naming strategy sem usarmos uma framework PHP, anexando diretamente nas configurações do Doctrine nativo.
<?php//Considerando que a variável "$configuration" seja uma instancia do objeto de configuração do Doctrine ORM.
$nameStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER);
$configuration->setNamingStrategy($nameStrategy);
Lembrando, CASE_LOWER é uma constante do PHP para textos em caixa baixa(lower case). Você poderá utilizar a constante CASE_UPPER no lugar desta se preferir que seus campos no banco de dados fiquem em caixa alta(UPPER CASE).
Symfony 2
No Symfony a partir da versão 2.7 LTS possuímos essa implementação já configurada como padrão, uma vez as boas práticas de codificação obrigam variáveis em camel case e no banco de dados o ideal seja utilizarmos underscore.
Para configurar caso esteja utilizando uma versão inferir, abra o arquivo config.yml localizado no diretório app/config e o configure de acordo com o exemplo utilizado abaixo.
doctrine:
orm:
naming_strategy: doctrine.orm.naming_strategy.underscore
Zend Framework 2
Em nenhum lugar da internet achei uma documentação de como implementar o naming strategy no Zend Framework 2, porem é muito simples e claro que explicarei isso para a comunidade PHP. :)
Por padrão no Doctrine para o Zend Framework 2 o nome exato da variável representa o nome do campo no banco de dados. Se escrevermos uma variável com o nome de $exemploVariavel o campo criado no banco de dados também se chamará exemploVariavel(quando suportado pelo SGBD, causando incompatibilidade entre Doctrine/Banco de dados).
Para configurar o naming strategy no Zend Framework, abra o arquivo de configuração correspondente ao DoctrineORMModule na pasta config/autoload. Normalmente é de costume incluir essas configurações nos arquivos global.php e/ou local.php.
return array(
'doctrine' => array(
'configuration' => array(
'orm_default' => array(
'naming_strategy' => new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER)
),
),
'entitymanager' => array(
'orm_default' => array(
'connection' => 'orm_default',
'configuration' => 'orm_default',
),
),
)
);
Assim como na forma nativa, usarmos o CASE_LOWER para textos em caixa baixa(lower case). Você poderá utilizar a constante CASE_UPPER no lugar desta se preferir que seus campos no banco de dados fiquem em caixa alta(UPPER CASE).
Links uteis
- Instalando e configurando o Doctrine ORM
- Documentação para naming strategy customizadas(em inglês)
- Padrões de codificação “PSR-2”(im inglês)
- Padrões de codificação “symfony”(im inglês)
Considerações finais
Usando esse recurso eliminamos a necessidade de ficarmos especificando o nome de cada campo manualmente e aumentamos a compatibilidade do Doctrine com o SGBD utilizado em seu projeto.
Um exemplo de compatibilidade é o Oracle, onde temos obrigatoriamente de usarmos o padrão de nomenclaturas em caixa alta e underscore.
Qualquer dúvida sobre essa implementação não deixem de perguntar ;)
Até a próxima pessoal!