Alkalmazás
Az alkalmazás képviseli a kérés feldolgozásának végrehajtási környezetét.
Elsődleges feladata feloldani a felhasználó kérését és továbbítani a megfelelő
kontrollernek további feldolgozásra. Ezen kívül az alkalmazás szintű beállítások
tárolásának központi helyeként is szolgál. Ezért az alkalmazást front-controller
-nek
is szokták nevezni.
A belépési szkript (/doc/guide/basics.entry) az alkalmazást 'singleton'-ként hozza létre. Az alkalmazás 'singleton' bárhol elérhető a kovetkezőn keresztül: Yii::app().
Alkalmazás beállítás
Alapértelmezésként az alkalmazás a CWebApplication egy példánya. Testreszabásához alap esteben egy konfigurációs fájlt (vagy tömböt) biztosítunk, hogy inicializáljuk tulajdonságait példányosítása során. Egy másik módszer az alkalmazás testreszabásához a CWebApplication kiterjesztése.
A beállítás egy kulcs-érték párokat tartalmazó tömbön keresztül történik. Minden kulcs az alkalamazás egy tulajdonságának nevét képviseli, míg minden érték a hozzá tartozó tulajdonság alapértelmezését állítja be. Például a következő beállítás meghatározza az alkalmazás name és defaultController tulajdonságait.
array( 'name'=>'Yii Framework', 'defaultController'=>'site', )
Általában a beállítást egy külön PHP szkriptben tároljuk (pl.: protected/config/main.php
).
A szkripten belül a következők szerint visszaadjuk a konfigurációs tömböt:
return array(...);
A beállítás alkalmazásához a konfigurációs fájl nevét paraméterként kell átadjuk az alkalamazás konstruktorának, vagy Yii::createWebApplication()-nek a következők szerint (ez általában a belépési szkript-ben történik):
$app=Yii::createWebApplication($configFile);
Tipp: Ha az alkalmás bonyolult konfigurációt igényel, szétoszthatjuk több fájlba, melyek mindegyike visszadja a konfigurációs tömb egy részét. Végül a fő konfigurációs fájlban a PHP
include()
-ot meghívva beolvassuk az egyes beállításokat és utána egy teljes konfigurációs tömbbé egyesítjük.
Az alkalmazás alap könyvtára
Az alkalmazás alap könyvtára nem más, mint a könyvtár, melyben az összes
biztonságra érzékeny PHP szkript és adat található. Alapértelmezésként ez a
belépési szkriptet tartalmazó könyvtár protected
nevű alkönyvtára. Helye
testreszabható az alkalmazás basePath tulajdonságának
meghatározásával az alkalmazás beállításban.
Az alkalmazás alap könyvtára alatt található tartalmaknak nem szabad
web felhasználók által elérhetőnek lenniük. Apache HTTP
szerverrel ez egyszerűen elérhető egy .htaccess
fájl
elhelyezésével az alap könyvtárban. A .htaccess
fájl tartalma a következő:
deny from all
Alkalmazás komponens
Az alkalmazás képességei könnyen testraszabhatóak és gazdagíthatóak rugalmas komponens szerkezetének köszönhetően. Az alkalmazás komponensek egy halmazát kezeli, melyek mindegyike egy speciális képességet valósít meg. Például, az alkalmazás egy felhasználói kérést a CUrlManager és CHttpRequest segítségével old fel.
Az alkalmazás components tulajdonságának beállításával testreszabhatjuk az osztályát és tulajdonságait bármelyik felhasznált komponensnek. Például, beállíthatjuk úgy a CMemCache komponenst, hogy több memcache szervert használjon gyorsítótárazásra:
array( ...... 'components'=>array( ...... 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port'=>11211, 'weight'=>40), ), ), ), )
A fentiekben hozzáadjuk a cache
elemet a components
tömbhöz. A cache
elem
meghatározza, hogy a komponens CMemCache
osztályú és servers
tulajdonsága a
megadottak szerint legyen beállítva.
Egy komponenst a Yii::app()->ComponentID
használatával érhetünk el, ahol is
ComponentID
a komponens azonosítójára hivatkozik (pl.: Yii::app()->cache
).
Egy alkalmazás komponenst letilthatunk, ha beállításakor az enabled
tulajdonságát
false
-ra állítjuk. Ha egy letiltott komponenst próbálunk elérni null
-t kapunk
visszatérési értékként.
Tipp: Alapértelmezésként a komponensek igény szerint kerülnek létrehozásra. Ez azt jelenti, hogy egy komponens nem is jön létre egyáltalán, ha a felhasználói kérés során nincs rá szükség. Következményképpen az átlagos teljesítmény még akkor sem csökken, ha az alkalmazást sok komponenssel konfiguráljuk. Ugyanakkor néhány komponenst minden esetben létre kell hozni (pl.: CLogRouter), függetlenül attól, hogy hivatkozunk-e rá, vagy sem. Ennek eléréséhez felsoroljuk az azonosítóikat az alkalmazás preload tulajdonságában.
Alap alkalmazás komponensek
Yii meghatároz néhány alap alkalmazás komponenst, biztosítandó a web alkalmazások alap képességeit. Például a request komponens a felhasználói kérések feloldására, valamint URL és süti információk biztosítására használatos. E komponensek tulajdonságainak beállításával szinte minden tekintetben testreszabhatjuk Yii alap viselkedését.
Következzék a CWebApplication által előre meghatározott komponensek listája:
assetManager: CAssetManager - manages the publishing of private asset files.
authManager: CAuthManager - manages role-based access control (RBAC).
cache: CCache - adat gyorstárazási lehetőséget biztosít. Megjegyzendő: meg kell határozni a tényleges osztályát (pl.: CMemCache, CDbCache), különben
null
kerül visszaadásra a komponens elérésekor.clientScript: CClientScript - kliens szkripteket kezel (JavaScript és CSS).
coreMessages: CPhpMessageSource - a Yii keretrendszer alap üzeneteinek lefordított változatát biztosítja.
db: CDbConnection - adatbázis kapcsolatot biztosít. Megjegyzendő: be kell állítani a connectionString tulajdonságát, hogy használható legyen.
errorHandler: CErrorHandler - nem kezelt PHP hibákat és kivételeket kezel.
messages: CPhpMessageSource - a Yii alklamazás által használt üzenetek lefordított változatát biztosítja.
request: CHttpRequest - felhasználói kérésekkel kapcsolatos információkat biztosít.
securityManager: CSecurityManager - biztonsággal kapcsolatos szolgáltatásokat biztosít, mint pl. hash-elés, titkosítás.
session: CHttpSession - munkamenet-kezeléssel kapcsolatos képességeket biztosít.
statePersister: CStatePersister - provides global state persistence method.
urlManager: CUrlManager - URL elemzéssel és létrehozással kapcsolatos képességeket biztosít.
user: CWebUser - felhasználó azonosítási információkat képvisel.
themeManager: CThemeManager - témákat kezel.
Alkalmazás életciklus
Egy felhasználói kérés kezelése során az alkalmazás a következő életciklust járja be:
Alkalmazás előkészítése CApplication::preinit() segítségével;
Osztály autoloader és hibakezelés beállítása;
Alap alkalmazás komponensek regsiztrálása;
Alkalmazás beállítás betöltése;
Alkalmazás inicializálása CApplication::init() segítségével
- Alkalmazás viselkedések regisztrálása;
- Statikus alkalmazás komponensek betöltése;
onBeginRequest esemény létrehozása;
Felhasználói kérés feldolgozása:
- a kérés feloldása;
- kontrolelr létrehozása;
- kontroller futtatása;
onEndRequest esemény létrehozása;