Application utgör exekveringsomgivning vid behandling av inkommande request.
Dess huvudsakliga uppgift är att dela upp en request från användare och skicka
denna vidare till relevant kontroller för fortsatt bearbetning. Den tjänar också
som central plats för konfigurationer på applikationsnivå. Av denna anledning
kallas Application även front-controller
.
Application skapas av startskriptet som en singleton vilken alltid kan nås via Yii::app().
Som standard är application en instans av CWebApplication. En anpassad version erhålls normalt genom att bifoga en konfigureringsfil (eller array) för initiering av propertyvärden i samband med att applikationsinstansen skapas. Ett alternativt sätt är att ärva från och utöka CWebApplication.
Konfigurationen är en array bestående av nyckel-värdepar. Varje nyckel representerar namnet på en property i applikationsobjektet, det tillhörande värdet blir propertyns initialvärde. Exempel: följande konfiguration sätter applikationens namn och propertyn standardcontroller.
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
Normalt lagras konfigurationen i ett separat PHP-skript (t.ex.
protected/config/main.php
). I skriptet bildar konfigurationens array
returvärde som följer:
return array(...);
Konfigurationen träder i kraft genom att dess filnamn lämnas som parameter till applikationens konstruktor, eller till Yii::createWebApplication(), på nedanstående sätt, vilket vanligtvis sker i startskriptet:
$app=Yii::createWebApplication($configFile);
Tips: Om applikationens konfiguration är mycket omfattande kan den delas upp på flera filer, var och en bidragande med ett avsnitt av konfigurationsarrayen. De separata filerna kombineras därefter med hjälp av PHP
include()
till en komplett konfigurationsarray i konfigurationens huvudfil.
Application base directory refererar till rotkatalogen som innehåller alla
säkerhetskänsliga PHP-skript och data. Som standard är den en underkatalog med
namnet protected
, placerad under katalogen som innehåller startskriptet.
Placeringen kan anpassas via propertyn basePath i
applikationens konfiguration.
Innehållet i applikationens rotkatalog med underkataloger skall inte vara
tillgängliga för webbanvändare. Med Apache HTTP-
server, kan detta lätt ordnas genom att placera en
fil med namnet .htaccess
i rotkatalogen. Innehållet i .htaccess
är som följer:
deny from all
Applications funktionalitet kan lätt anpassas och berikas genom dess flexibla komponentarkitektur. Application handhar en uppsättning applikationskomponenter som var och en implementerar specifika finesser. Exempel: application behandlar en inkommen request från användare med hjälp av komponenterna CUrlManager och CHttpRequest.
Genom att konfigurera applikationens components-property, kan class- och propertyvärden sättas för varje komponent i applikationen. Exempel: CMemCache-komponenten kan konfigureras att använda multipla memcache-servrar för cachelagring,
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
I ovanstående exempel ingår elementet cache
i arrayen components
.
Av elementet cache
framgår att komponentens klass är CMemCache
samt hur dess
servers
-property skall initialiseras.
För tillgång till en applikationskomponent, använd Yii::app()->ComponentID
,
där ComponentID
refererar till komponentens ID (t.ex. Yii::app()->cache
).
En applikationskomponent kan avaktiveras genom att enabled
sätts till false i
dess konfiguration. För en avaktiverad komponent erhålls null som returvärde.
Tips: Som standard skapas applikationskomponenter på begäran. Detta innebär att en applikationskomponent inte alls behöver instansieras om den inte kommer till användning under en request från användare. Därav följer att totalprestanda inte behöver ta skada av att en applikation konfigureras med många komponenter. Vissa applikationskomponenter (t.ex. CLogRouter) kan behöva instansieras vare sig de används eller inte. För att åstadkomma detta, räkna upp deras IDs i applikationens preload-property.
Yii definierar en kärna av applikationskomponenter som tillhandahåller i webbapplikationer allmänt förekommande finesser. Exempelvis komponenten request används för att behandla inkommande request från användare och leverera information såsom URL, cookies. Genom konfigurering av kärnkomponenternas propertyn kan Yii:s standardbeteende förändras på nästan varje tänkbart sätt.
Nedan listas kärnkomponenterna som fördeklareras av CWebApplication.
assetManager: CAssetManager - handhar publicering av privata resursfiler
authManager: CAuthManager - hanterar rollbaserad åtkomst (RBAC).
cache: CCache - tillhandahåller data cache-funktionalitet. Observera att aktuell klass (e.g. CMemCache, CDbCache) måste specificeras. I annat fall returneras null när komponenten skall användas.
clientScript: CClientScript - handhar klientskript (javascripts and CSS).
coreMessages: CPhpMessageSource - tillhandahåller översatta systemmeddelanden som Yii framework använder.
db: CDbConnection - tillhandahåller databasanslutningen. Observera att propertyn connectionString måste konfigureras om denna komponent används.
errorHandler: CErrorHandler - hanterar icke uppfångade PHP-felmeddelanden och exception.
messages: CPhpMessageSource - tillhandahåller översatta texter ingående i Yii-applikationer.
request: CHttpRequest - tillhandahåller information relaterad till inkommen request från användare.
securityManager: CSecurityManager - tillhandahåller säkerhetsrelaterade tjänster såsom hashning, kryptering.
session: CHttpSession - tillhandahåller funktionalitet relaterad till session.
statePersister: CStatePersister - tillhandahåller metod för lagring av globalt tillstånd.
urlManager: CUrlManager - tillhandahåller funktionalitet för att analysera eller skapa URL:er.
user: CWebUser - representerar identitetsinformation för aktuell användare.
themeManager: CThemeManager - handhar teman.
Vid behandling av en inkommen request från användare genomgår en applikation följande livscykel:
Förinitialisera applikationen med hjälp av CApplication::preinit();
Sätt upp autoladdare för klasser och felhantering;
Registrera applikationens kärnkomponenter;
Ladda applikationens konfiguration;
Initialisera applikationen med CApplication::init()
behaviors
;Signalera händelsen onBeginRequest;
Bearbeta användarens request:
7.Signalera händelsen onEndRequest;
Signup or Login in order to comment.