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().
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:
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:
$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 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
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 cachedo tablicy komponentów
components.
Element
cachemówi, iż klasą komponentu jest
CMemCachea 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.
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.
assetManager: CAssetManager - zarządza publikowaniem prywatnych plików zasobów.
authManager: CAuthManager - zarządza bazującą na rolach kontrolą dostępu (RBAC).
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: CClientScript - zarządza skryptami klienta (skrypty javascripts oraz CSS).
coreMessages: CPhpMessageSource - dostarcza przetłumaczone rdzennych komunikaty używane przez framework Yii.
db: CDbConnection - dostarcza połączenia z bazą danych. Zauważ, że musisz skonfigurować jego właściwość connectionString aby móc używać ten komponent.
errorHandler: CErrorHandler - zarządza niezłapanymi błędami oraz wyjątkami PHP.
messages: CPhpMessageSource - dostarcza przetłumaczone komunikaty używane przez aplikacje Yii.
request: CHttpRequest - dostarcza informacji powiązanych z żądaniem użytkownika.
securityManager: CSecurityManager - dostarcza usługi związane z bezpieczeństwem, takie jak haszowanie, szyfrowanie.
session: CHttpSession - dostarcza funkcjonalności powiązanych z sesją.
statePersister: CStatePersister - provides global state persistence method.
urlManager: CUrlManager - dostarcza funkcjonalności tworzenia i parsowania adresów URL.
user: CWebUser - reprezentuje informację o tożsamości aktualnego użytkownika.
themeManager: CThemeManager - zarządza tematami.
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()
Zgłoszenie zdarzenia onBeginRequest;
Przetwarzanie żądania użytkownika:
7.Zgłoszenie zdarzenia onEndRequest;
Signup or Login in order to comment.