Organizando as configurações - Preparando para o Deploy - no CakePHP 3 Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 3 anos, 7 meses, 2 semanas, 4 dias atrás.

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.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!