V dnešnej časti o Yii frameworku si ukážeme ako nakonfigurovať aplikáciu. Je viac možností ako nastaviť chovanie, ale najčastejšie sa chovanie aplikácie nastavuje v časti protected/config/main.php .
Najskôr však začnem súborom index.php, ktorý je umiestnený vo webroote našej aplikácie. Inak sa nazýva tento súbor aj „bootstrap“ čo znamená, že všetky dotazy od užívateľa idú cez súbor index.php. Napríklad ako som spomínal v minulom diele predstavme si, že máme tabuľku uzivatelia, k nej potrebný controller , model a view , tak potom by URL zadané do prehliadača vyzerala nasledovne : www.example.com/index.php?r=uzivatelia/show/id/34. Tak ako sme si povedali v minulej časti neupravená adresa má tento tvar, čiže bootstrap a za ním controller a action. Za action už nasledujú len {„kluc“ =>“hodnota“ } $_GET parametre.
Index.php je generovaný Yiic alebo gii tool-om a má iba 5 riadkov.
1. $yii=dirname(__FILE__).'/framework.1.1.2/yii.php';
Prvý riadok nám hovorí kde má aplikácia hľadať Yii framework. Konkrétne táto cesta nám hovorí, že framework je uložený vo webroote a sice v zložke framework.1.1.2. Môžete ho ale samozrejme umiestniť kamkoľvek na disk.
2. $config=dirname(__FILE__).'/protected/config/main.php';
Druhý riadok hovorí, kde má aplikácia hľadať konfiguračný súbor.
3. defined('YII_DEBUG') or define('YII_DEBUG',true);
Tretí riadok umožnuje zapnutie alebo vypnutie debugovacieho módu. Počas vývoja ho nechajte tak ako je, ale ak web už pôjde naostro tento riadok zmažte.
4. require_once($yii);
5. Yii::createWebApplication($config)->run();
Posledné dva riadky načítajú framework a spustia aplikáciu. Takže to bol index.php a teraz sa pozrieme na už spomínaný main.php (protected/config/main.php). V tomto súbore sa nastavujú parametre celej webovej aplikácie, ktoré si aplikácia načíta vždy keď ju spustíte... Súbor main.php vlastne vracia multidimenzionálne pole s informáciami o aplikácii pričom niektoré sú už prednastavené , ale niektoré budeme dopĺňať počas vývoja aplikácie. Teraz si popíšeme niektoré dôležité nastavenia v main.php.
„name“ => „názov aplikácie“
Umožňuje nastavenie názvu aplikácie, ktorý sa bude zobrazovať v prednastavenom dizajne v sekcii title. Ja osobne túto možnosť nevyužívam ale je dobré vedieť, že existuje ;).
'import'=>array(
'application.models.*',
'application.components.*',
),
Importom sa nastaví autonačítanie potrebných tried. Inak povedané ak napríklad aplikácia používa niekoľko DB tabuliek tým pádom musí používať aj niekoľko tried model-u, ktoré zaobalujú tieto DB tabuľky. A ak chceme z akéhokoľvek miesta kódu aplikácie volať metódy týchto tried a nechceme ich neustále include-ovať, tak nastavíme cesty v main.php v sekcii import a oni sa načítajú same. Konkrátne v prvom riadku som povedal aby automaticky naloadoval všetky triedy zo zložky models (webroot/protected/models) a v druhom aby načítal všetky triedy zo zložky components (webroot/protected/components).
'defaultController' => 'uzivatelia',
Ako už názov hovorí a toto je dosť podstatné nastavenie môžete (mali by ste , musíte) nastaviť predvolený controller. Je to controller, ktorý sa zavolá pri prvom spustení webovej aplikácie. Ak toto nastavenie ignorujete Yii framework má nastavený controller s názvom site.
Ďalšia sekcia je components. Z tejto sekcie si popíšeme nastavenie pripojenia k databáze.
'components'=>array(
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=menoDB',
'username'=>'root',
'password'=>'',
'charset'=>'UTF8',
),
)
Takže connectionString je DSN (Database Source Name) alebo názov a host DB. V našom konkrétnom prípade na lokálnom počítači hostujeme DB na localhoste a preto nastavíme parameter host na localhost. Ale ja napríklad hostujem aplikácie na www.websupport.sk a tam treba nastavit unix socket. Vtedy sa nám tento riadok trošičku zmení a bude vyzerať nasledovne:
'connectionString'=>'mysql:unix_socket=/tmp/mysql50.sock;dbname=menoDB,
Z toho vyplýva, že ak idete naostro treba si zistiť u providera ako sa pripojiť k DB, či cez host-a alebo unix_socket alebo nejak inak (odporúčam manuál). dbaname je klasický názov DB. Username je prihlasovacie meno k DB a password je heslo k DB.
Ďaľšie nastavenie v sekcii components je urlManager.
'urlManager'=>array(
'urlFormat'=>'path'
),
V predchádzajúcich častiach som písal, že tvar url sa dá zmeniť na zrozumiteľnejšiu formu a práve toto nastavenie to umožňuje. Umožnuje nastaviť takzvané user-friendly url , kroré sú potrebné hlavne pre webové vyhľadávače ako google a podobne. Takže napríklad pred tým než by sme nastavili urlFormat na path by url stránky vyzerala nasledovne:
http://localhost/index.php?r=uzivatelia/create
čo znamenajú jednotlivé časti url som vysvetloval. Ak aktivujeme urlManager a nastavíme urlFormat na hodnotu path zmeníme tým tvar url na:
http://localhost/index.php/uzivatelia/create
Mne tam ešte vadí ten index.php ;) A preto odstránime aj ten a pridáme nasledovný parameter pod urlFormat :
'showScriptName' => false
Takže keď zhrniem sekciu components, ktorú sme doteraz vytvárali bude vyzerať nasledovne:
'components'=>array(
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=menoDB',
'username'=>'root',
'password'=>'',
'charset'=>'UTF8',
),
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false
)
),
A posledné nastavenia ktoré si popíšeme v sekcii components je logovanie.
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
array(
'class'=>'CWebLogRoute',
)
),
),
Týmto nastavením získame vynikajúci debugovací nástroj, ktorý nám poskytne veľa informácií o zobrazenej stránke.
Takže ukázali sme si niektoré nastavenia aplikácie v Yii frameworku. Existuje ešte oveľa viac nastavení , ale tie si budeme vysvetľovať počas výroby aplikácie. Budú to napríklad nastavenia bezpečnosti , cachovania a ďaľších. Super vec na Yii frameworku je to, že nie všetky komponenty aplikácie ako sme si ich ukazovali budú načítané do aplikácie pri každom požiadavku (requeste) na aplikáciu. To zvyšuje výkonnosť celého webu, lebo zbytočne do pamäti nenaťahuje komponenty, ktoré nepotrebuje ale len tie s ktorými práve pracuje. Takže teraz to úplne zhrniem a sekcia components bude vyzerať nasledovne :
'components'=>array(
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=menoDB',
'username'=>'root',
'password'=>'',
'charset'=>'UTF8',
),
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
array(
'class'=>'CWebLogRoute',
)
),
),
),
A poslednú vec , ktorú si ukážeme je sekcia params.
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
),
Sú to vlastne paramete ku ktorým môžeme pristupovať neskôr z akéhokoľvek miesta v kóde aplikácie ako napríkla e-mail na administrátora. Len pre zujímavosť hocikde v aplikácii pristúpime k parametru adminEmail takto : Yii::app()->params[adminEmail];
V budúcom diele začneme podrobnejšie rozoberať jednotlivé časti aplikácie ako Model , View a Controller. Samozrejme, že sa to nedá stihnúť v jednom diele ;) Vaše reakcie očakávam v diskusii pod článkom.