Files
yii/docs/guide/sv/basics.application.txt
2010-11-14 14:17:44 +00:00

198 lines
8.4 KiB
Plaintext

Applikationsobjekt
==================
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](/doc/guide/basics.entry) som en singleton
vilken alltid kan nås via [Yii::app()|YiiBase::app].
Applikationens konfiguration
----------------------------
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|CApplication::name] och propertyn
[standardcontroller|CWebApplication::defaultController].
~~~
[php]
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:
~~~
[php]
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](/doc/guide/basics.entry):
~~~
[php]
$app=Yii::createWebApplication($configFile);
~~~
> Tip|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.
Applikationens rotkatalog
-------------------------
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|CWebApplication::basePath] i
[applikationens konfiguration](/doc/guide/basics.application#application-configuration).
Innehållet i applikationens rotkatalog med underkataloger skall inte vara
tillgängliga för webbanvändare. Med [Apache HTTP-
server](http://httpd.apache.org/), 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
~~~
Applikationskomponent
---------------------
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|CApplication::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,
~~~
[php]
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.
> Tip|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|CApplication::preload]-property.
Applikationens kärnkomponenter
------------------------------
Yii definierar en kärna av applikationskomponenter som tillhandahåller i
webbapplikationer allmänt förekommande finesser. Exempelvis komponenten
[request|CWebApplication::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|CWebApplication::assetManager]: [CAssetManager] - handhar publicering av privata resursfiler
- [authManager|CWebApplication::authManager]: [CAuthManager] - hanterar rollbaserad åtkomst (RBAC).
- [cache|CApplication::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|CWebApplication::clientScript]: [CClientScript] - handhar klientskript (javascripts and CSS).
- [coreMessages|CApplication::coreMessages]: [CPhpMessageSource] - tillhandahåller översatta systemmeddelanden som Yii framework använder.
- [db|CApplication::db]: [CDbConnection] - tillhandahåller databasanslutningen. Observera att propertyn [connectionString|CDbConnection::connectionString] måste konfigureras om denna komponent används.
- [errorHandler|CApplication::errorHandler]: [CErrorHandler] - hanterar icke uppfångade PHP-felmeddelanden och exception.
- [format|CApplication::format]: [CFormatter] - formaterar datavärden inför presentation. Tillgängligt sedan version 1.1.0.
- [messages|CApplication::messages]: [CPhpMessageSource] - tillhandahåller översatta texter ingående i Yii-applikationer.
- [request|CWebApplication::request]: [CHttpRequest] - tillhandahåller information relaterad till inkommen request från användare.
- [securityManager|CApplication::securityManager]: [CSecurityManager] - tillhandahåller säkerhetsrelaterade tjänster såsom hashning, kryptering.
- [session|CWebApplication::session]: [CHttpSession] - tillhandahåller funktionalitet relaterad till session.
- [statePersister|CApplication::statePersister]: [CStatePersister] - tillhandahåller metod för lagring av globalt tillstånd.
- [urlManager|CWebApplication::urlManager]: [CUrlManager] - tillhandahåller funktionalitet för att analysera eller skapa URL:er.
- [user|CWebApplication::user]: [CWebUser] - representerar identitetsinformation för aktuell användare.
- [themeManager|CWebApplication::themeManager]: [CThemeManager] - handhar teman.
Livscykel för applikationsobjekt
--------------------------------
Vid behandling av en inkommen request från användare genomgår en applikation följande livscykel:
0. Förinitialisera applikationen med hjälp av [CApplication::preinit()];
1. Sätt upp autoladdare för klasser och felhantering;
2. Registrera applikationens kärnkomponenter;
3. Ladda applikationens konfiguration;
4. Initialisera applikationen med [CApplication::init()]
- Registrera applikationens `behaviors`;
- Ladda statiska (static) applikationskomponenter;
5. Signalera händelsen [onBeginRequest|CApplication::onBeginRequest];
6. Bearbeta användarens request:
- Behandla inkommen request från användare;
- Skapa kontroller;
- Exekvera kontroller;
7. Signalera händelsen [onEndRequest|CApplication::onEndRequest];
<div class="revision">$Id: basics.application.txt 2488 2010-09-20 11:38:02Z mdomba $</div>