A primeira coisa que me irritou quando baixei a versão (ainda em beta) do CakePHP 3 é que agora as configurações ficam todas em um único arquivo. E se eu precisar configurar algo que deveria refletir no servidor de produção e localmente? Eu teria que editar o arquivo no servidor (que aqui é via SSH, sem FTP) ou criar uma rotina para identificar aonde estou (produção ou desenvolvimento), mas calma, tem uma solução melhor.
Eu sempre toco a tecla que antes do framework ser o Cake ele é PHP e da pra fazer muita coisa com PHP, mas o CakePHP é bem mais limitado, o mesmo vale PARA QUALQUER OUTRO FRAMEWORK. Pode parecer obvio para muitos, mas para outros não é, assim como a dica que vou dar.
Então vamos usar um pouco de PHP pra separar o que queremos das configurações em arquivo separados, assim eu simplesmente altero edito eles no servidor de produção e não esquento mais a cabeça com os próximos envios.
Gostou deste artigo?
Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!
Este é o arquivo de configuração que vou usar como modelo aqui para o artigo: https://github.com/cakephp/app/blob/master/config/app.default.php
A primeira coisa que eu quero separar é o banco de dados, as configurações começam na linha 210 do arquivo que passei ai em cima, se for atualizado e você notar antes de mim, avisa nos comentários.
Vamos criar um arquivo no mesmo diretório do App.php chamado database.php com o conteúdo:
return [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
/**
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'nonstandard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
/**
* Set identifier quoting to true if you are using reserved words or
* special characters in your table or column names. Enabling this
* setting will result in queries built using the Query Builder having
* identifiers quoted when creating SQL. It should be noted that this
* decreases performance because each query needs to be traversed and
* manipulated before being executed.
*/
'quoteIdentifiers' => false,
/**
* During development, if using MySQL < 5.6, uncommenting the
* following line could boost the speed at which schema metadata is
* fetched from the database. It can also be set directly with the
* mysql configuration directive 'innodb_stats_on_metadata = 0'
* which is the recommended value in production environments
*/
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
],
/**
* The test connection is used during the test suite.
*/
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
//'port' => 'nonstandard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'test_myapp',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
],
];
Note que este é o mesmo código setado na linha 210 do App.php (link que passei).
Agora na linha 210 do App.php:
'Datasources' => require 'database.php'
Agora sempre que eu quiser alterar uma configuração de cache, log ou o que eu precisar posso fazer sem medo de substituir as configurações de banco de dados.
O mesmo vale para o debug e email, por exemplo ou o que você quiser deixar separado da configuração principal.
//App.php - linha 12
'debug' => require 'debug.php'
//debug.php
return true;
//App.php - linha 181
'EmailTransport' => require 'email_transport.php'
//email_transport.php
return [
'default' => [
'className' => 'Mail',
// The following keys are used in SMTP transports
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'secret',
'client' => null,
'tls' => null,
],
];
Não esqueça de adicionar os arquivos ao .gitignore e remover o App.php que está lá (linha 2 do .gitignore).
Um detalhe é que as linhas dos arquivos que indiquei podem alterar em alguns casos, nada que um ctrl+f (pesquisa) não resolva.