CakePHP - Automatické nastavení pro vývoj a pro produkci
Článek je psán na verzi CakePHP 2.4.1 a snad mu porozumí začátečník i pokročilý. Pokud najdete chybku, nebo je něco nejasné, křičte na mě v komentářích!
Pro menší projekty je to možná zbytečné, ale občas je prostě potřeba měnit nastavení cache, session, případně nějaké jiné nastavení v core.php nebo bootstrap.php. Přepisovat nastavení debugu, případně databází, stojí za starou belu, takže by určitě bylo fajn pomoct si nějakou podmínkou.
Proto vytvoříme soubor production_variable.php
v adresáři app/Config a umístíme do něj definici testovacího / produkčního prostředí.
<?php define('PRODUCTION', false); // pro ostrý provoz dáme true
Na localhostu necháme false, do produkce nahrajeme true, a odteď už na něj sahat nebudeme. A co s takovým souborem? Cake si nejdříve načte core.php a potom pokračuje na bootstrap.php, případně database.php, takže si tuto konstantu odchytíme hned na začátku core.php:
<?php require "production_variable.php"; ...
Tím pádem celá aplikace ví, jestli si hrajeme, nebo jedeme na ostro, takže stačí už jen psát věci jako: Configure::write('debug', PRODUCTION ? 0 : 2);
a podobně.
Zapeklitější nastavení databáze
S databází je to kapku těžší, ale jen kapku. :) V souboru database.php v třídě DATABASE_CONFIG budeme mít zaráz nastavení pro produkci: $default = array(...)
i pro vývoj: $dev = array(...)
. Teď už jen použít to správné, k tomu si upravíme konstruktor této třídy, který vložíme za definice databází:
function __construct (){ if(!PRODUCTION){ $this->default = $this->dev; } }
Takže vždy, když bude Cake inicializovat databázi, použije nastavení podle konstanty PRODUCTION. No, není to skvělé? Je to skvělé!
Zobrazit celý obsah database.php
<?php class DATABASE_CONFIG { public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'mysql.canes.cz', 'login' => 'canes_is_awesome', 'password' => 'canes_sucks', 'database' => 'canes_cz_database', 'prefix' => '', 'encoding' => 'utf8', ); public $dev = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => 'ubertajneheslo', 'database' => 'canes_cz_database', 'prefix' => '', 'encoding' => 'utf8', ); function __construct (){ if(!PRODUCTION){ $this->default = $this->dev; } } }