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;
}
}
}