Aplikacja
Aplikacja reprezentuje kontekst wykonywania podczas przetwarzania żądania.
Jej głównym zadaniem jest rozszyfrowywanie żądań użytkownika oraz rozprowadzanie
ich do odpowiednich kontrolerów w celu ich późniejszego przetworzenia. Służy ona również
jako główne miejsce do przechowywania konfiguracji na poziomie aplikacji. Z tego powodu,
aplikacja jest również nazywana front-controller'em.
Aplikacja jest tworzona jako singleton przez skrypt wejściowy.
Singletor reprezentujący aplikację jest dostępny w każdym miejscu poprzez wywołanie
Yii::app().
Konfiguracja aplikacji
Domyślnie, aplikacja jest instancją klasy CWebApplication. Aby dostosować ją
do własnych potrzeb, zazwyczaj dostarczamy jej plik konfiguracyjny (lub tablicę)
w celu zainicjalizowania wartości właściwości aplikacji podczas tworzenia jej instancji.
Alternatywnym sposobem dostosowywania aplikacji do własnych potrzeb jest rozszerzenie
klasy CWebApplication.
Konfiguracja jest tablicą par klucz-wartość. Każdy klucz reprezentuje nazwę właściwości
instancji aplikacji a każda wartość odpowiadającą jej wartość początkową. Na przykład,
następująca konfiguracja, konfiguruje właściwości name oraz
defaultController aplikacji.
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:
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:
$app=Yii::createWebApplication($configFile);
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 w konfiguracji aplikacji.
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
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 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).
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.
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 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
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.
Cykl życia aplikacji
Podczas przetwarzania żądania użytkownika aplikacja podlega następującemu cyklowi
życia:
Inicjalizacja początkowa aplikacji za pomocą CApplication::preinit();
Utworzenie klasy autoloader oraz klasy zarządzania błędami;
Zarejestronwanie rdzennych komponentów aplikacji;
Wczytanie konfiguracji aplikacji;
Zainicjalizowanie aplikacji przy użyciu metody CApplication::init()
- rejestruje zachowania aplikacji;
- załadowanie statycznych komponentów aplikacji;
Zgłoszenie zdarzenia onBeginRequest;
Przetwarzanie żądania użytkownika:
- Rozszyfrowanie żądania użytkownika;
- utworzenie kontrolera;
- uruchomienie kontrolera;
7.Zgłoszenie zdarzenia onEndRequest;
$Id: basics.application.txt 1601 2009-12-18 04:31:19Z qiang.xue $