Files
yii/docs/guide/pl/basics.application.txt
2011-01-16 14:55:27 +00:00

217 lines
9.3 KiB
Plaintext

Aplikacja
===========
Aplikacja reprezentuje wykonanie kontekstu przetwarzanego żądania.
Jej głównym zadaniem jest rozszyfrowywanie żądania użytkownika oraz wysłanie
ich do odpowiedniego kontrolera w celu ich późniejszego przetworzenia. Służy ona również
jako główne miejsce przechowywujące konfigurację na poziomie aplikacji. Z tego powodu,
aplikacja jest również nazywana `front-controller'em`.
Aplikacja jest tworzona jako singleton przez [skrypt wejściowy](/doc/guide/basics.entry).
Jest on dostępny w każdym miejscu poprzez wywołanie [Yii::app()|YiiBase::app].
Konfiguracja aplikacji
-------------------------
Domyślnie, aplikacja jest instancją klasy [CWebApplication]. Aby dostosować ją
do własnych potrzeb, zazwyczaj dostarczamy jej plik konfiguracyjny (lub tablicę)
podczas tworzenia jej instancji w celu zainicjalizowania wartości jej właściwości.
Alternatywnym sposobem dostosowywania aplikacji do własnych potrzeb jest rozszerzenie
klasy [CWebApplication].
Konfigurację stanowi tablica par klucz-wartość. Każdy klucz reprezentuje nazwę właściwości
instancji aplikacji a każda wartość z party reprezentuj odpowiadającą tej właściwości wartość początkową.
Na przykład, następująca konfiguracja, konfiguruje właściwości [name|CApplication::name] oraz
[defaultController|CWebApplication::defaultController] aplikacji.
~~~
[php]
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
~~~
Zazwyczaj przechowujemy konfigurację w osobnym skrypcie PHP (np. `protected/config/main.php`).
Wewnątrz skryptu zwracamy tablicę konfiguracyjną w następujący sposób:
~~~
[php]
return array(...);
~~~
Aby skorzystać z konfiguracji, przekazujemy nazwę pliku konfiguracyjnego jako parametr
do konstruktora aplikacji lub do metody [Yii::createWebApplication()] w następujący
sposób, dokładnie tak, jak zostało to zrobione w [skrypcie wejściowym](/doc/guide/basics.entry):
~~~
[php]
$app=Yii::createWebApplication($configFile);
~~~
> Tip|Wskazówka: Jeśli konfiguracja aplikacji jest bardzo złożona, możemy podzielić ją
na kilka plików, każdy będzie zwracał wtedy część tablicy konfiguracyjnej.
Następnie w głównym pliku konfiguracyjnym, wołamy funkcję PHP `include()` w celu
załadowania pozostałych plików konfiguracyjnych oraz złączamy je w jedną, kompletną
tablicę konfiguracyjną.
Folder główny aplikacji (ang. Application Base Directory)
--------------------------
Folder główny aplikacji wskazuje na katalog główny, który zawiera wszystkie
wrażliwe na bezpieczeństwo skrypty PHP oraz dane. Domyślnie, jest to podkatalog
nazwany `protected`, który znajduje się w katalogu zawierającym skrypt wejściowy.
Można go dostosować do własnych potrzeb poprzez ustawienie właściwości
[basePath|CWebApplication::basePath] w [konfiguracji aplikacji](/doc/guide/basics.application#application-configuration).
Dostęp do zawartości w folderze głównym aplikacji powinien być chroniony, tak by
żaden użytkownik webowy nie miał do niego dostępu. Dla [serwera HTTP Apache](http://httpd.apache.org/)
można to uczynić prosto poprzez umieszczenie pliku `.htaccess` w katalogu głównym.
Zawartość pliku `.htaccess` powinna być następująca:
~~~
deny from all
~~~
Komponent aplikacji
---------------------
Funkcjonalności oferowane przez aplikację mogą być łatwo dostosowane do potrzeb
oraz wzbogacone dzięki elastycznej komponentowej architekturze. Aplikacja zarządza
zestawem komponentów aplikacji, każdy z nich implementuje określoną funkcjonalność.
Na przykład, aplikacja rozszyfrowuje żądanie użytkownika przy pomocy komponentów
[CUrlManager] oraz [CHttpRequest].
Poprzez skonfigurowanie właściwości [komponentów|CApplication::components] aplikacji,
możemy dostosować do swoich potrzeb klasy oraz wartości właściwości każdego komponentu
aplikacji używanego w aplikacji. Na przykład, możemy skonfigurować komponent [CMemCache]
w taki sposób, że będzie używał wielu serwerów memcache do buforowania (ang. caching).
~~~
[php]
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
~~~
W powyższym przykładzie, dodaliśmy element `cache` do tablicy komponentów `components`.
Element `cache` mówi, iż klasą komponentu jest `CMemCache` a jej właściwość `servers`
powinna być w taki i taki sposób zainicjalizowana.
Aby dostać się do komponentu aplikacji używamy `Yii::app()->ComponentID`, gdzie
`ComponentID` odnosi się do ID komponentu (np. `Yii::app()->cache`).
Komponent aplikacji może zostać dezaktywowany poprzez ustawienie `enabled` na false
w jego konfiguracji. Wartość null jest zwracana, jeśli chcemy uzyskać dostęp do
dezaktywowanego komponentu.
> Tip|Wskazówka: Domyślnie, komponenty aplikacji tworzone są na żądanie. Oznacza to, że
komponent aplikacji nie zostanie tak długo utworzony, dopóki nie będzie żądania
dostępu do niego ze strony użytkownika. W rezultacie, ogólna wydajność nie będzie
zmniejszona nawet jeśli aplikacja posiada skonfigurowanych wiele komponentów. Część
komponentów aplikacji (np. [CLogRouter]) musi być utworzona bez względu na to czy
żądanie dostępu do nich wystąpiło, czy też nie. Aby to umożliwić, należy wypisać
ich numery ID we właściwości [preload|CApplication::preload] aplikacji.
Rdzenne komponenty aplikacji (ang. Core Application Components)
---------------------------
Yii predefiniuje zestaw podstawowych komponentów aplikacji aby dostarczyć funkcjonalność
wspólną dla prawie wszystkich aplikacji webowych. Na przykład, komponent [request|CWebApplication::request]
jest używany do rozszyfrowywania żądań użytkownika oraz dostarczania informacji takich
jak adres URL, ciasteczka. Poprzez konfigurowanie właściwości tych podstawowych komponentów,
możemy zmienić domyślne zachowanie Yii prawie w każdym jego aspekcie.
Poniżej znajduje się lista tych rdzennych komponentów, które są predeklarowane przez [CWebApplication].
- [assetManager|CWebApplication::assetManager]: [CAssetManager] - zarządza publikowaniem
prywatnych plików zasobów.
- [authManager|CWebApplication::authManager]: [CAuthManager] - zarządza bazującą
na rolach kontrolą dostępu (RBAC).
- [cache|CApplication::cache]: [CCache] - dostarcza funkcjonalność umożliwiającą
buforowanie danych. Zauważ, że musisz określić aktualną klasę (np. [CMemCache],
[CDbCache]). W przeciwnym przypadku, wartość null zostanie zwrócona kiedy będziesz
próbował uzyskać dostęp do tego komponentu.
- [clientScript|CWebApplication::clientScript]: [CClientScript] - zarządza
skryptami klienta (skrypty javascripts oraz CSS).
- [coreMessages|CApplication::coreMessages]: [CPhpMessageSource] - dostarcza
przetłumaczone rdzennych komunikaty używane przez framework Yii.
- [db|CApplication::db]: [CDbConnection] - dostarcza połączenia z bazą danych.
Zauważ, że musisz skonfigurować jego właściwość
[connectionString|CDbConnection::connectionString] aby móc używać ten komponent.
- [errorHandler|CApplication::errorHandler]: [CErrorHandler] - zarządza niezłapanymi
błędami oraz wyjątkami PHP.
- [format|CApplication::format]: [CFormatter] - formatuje wartości danych w celu wyświetlenia.
Udostępniono od wersji 1.1.0.
- [messages|CApplication::messages]: [CPhpMessageSource] - dostarcza przetłumaczone
komunikaty używane przez aplikacje Yii.
- [request|CWebApplication::request]: [CHttpRequest] - dostarcza informacji
powiązanych z żądaniem użytkownika.
- [securityManager|CApplication::securityManager]: [CSecurityManager] - dostarcza
usługi związane z bezpieczeństwem, takie jak haszowanie, szyfrowanie.
- [session|CWebApplication::session]: [CHttpSession] - dostarcza funkcjonalności
powiązanych z sesją.
- [statePersister|CApplication::statePersister]: [CStatePersister] -
provides global state persistence method.
- [urlManager|CWebApplication::urlManager]: [CUrlManager] - dostarcza funkcjonalności
tworzenia i parsowania adresów URL.
- [user|CWebApplication::user]: [CWebUser] - reprezentuje informację o tożsamości
aktualnego użytkownika.
- [themeManager|CWebApplication::themeManager]: [CThemeManager] - zarządza tematami.
Cykl życia aplikacji
----------------------
Podczas przetwarzania żądania użytkownika aplikacja podlega następującemu cyklowi
życia:
0. Inicjalizacja początkowa aplikacji za pomocą [CApplication::preinit()];
1. Utworzenie klasy autoloader oraz klasy zarządzania błędami;
2. Zarejestronwanie rdzennych komponentów aplikacji;
3. Wczytanie konfiguracji aplikacji;
4. Zainicjalizowanie aplikacji przy użyciu metody [CApplication::init()]
- rejestruje zachowania aplikacji;
- załadowanie statycznych komponentów aplikacji;
5. Zgłoszenie zdarzenia [onBeginRequest|CApplication::onBeginRequest];
6. Przetwarzanie żądania użytkownika:
- Rozszyfrowanie żądania użytkownika;
- utworzenie kontrolera;
- uruchomienie kontrolera;
7. Zgłoszenie zdarzenia [onEndRequest|CApplication::onEndRequest];
<div class="revision">$Id: basics.application.txt 2488 2010-09-20 11:38:02Z mdomba $</div>