0 follower

Application

Application este locul unde se executa procesarea cererilor client. Rolul principal este analizarea cererii client si transmiterea ei la controller-ul corespunzator pentru a fi procesata in continuare. De asemenea, Application joaca un rol central pentru pastrarea configuratiilor la nivel de aplicatie. De aceea, application mai este numita front-controller (controller radacina, principal).

Application este creata ca singleton de catre fisierul de intrare. In acest fel, accesul este posibil de oriunde via Yii::app().

1. Configurare

La baza, application este o instanta a CWebApplication. Pentru customizare, in mod normal trebuie sa furnizam un fisier de configurare (care este de fapt un array) pentru a initializa valorile proprietatilor atunci cand instanta application este creata. Ca alternativa de customizare, putem extinde CWebApplication.

Configuratia in sine este un array cu perechi key-value (cheie-valoare). Fiecare key reprezinta numele proprietatii instantei application, iar valoarea reprezinta valoarea initiala a proprietatii. De exemplu, asa se configureaza proprietatile name si defaultController:

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

De obicei retinem configuratia intr-un fisier PHP separat (ex. protected/config/main.php). Aici, se returneaza array-ul de configurare dupa cum urmeaza:

return array(...);

Ca sa aplicam configuratia, transmitem numele fisierului PHP ca parametru al constructorului clasei application, sau ca parametru al Yii::createWebApplication() in felul urmator (asa se face de obicei in fisierul de intrare ):

$app=Yii::createWebApplication($configFile);

Sfat: Daca aplicatia are nevoie de o configuratie complexa, putem sa o separam in mai multe fisiere, fiecare intorcand un array de configurare. Dupa aceea, in fisierul de configurare principal, adaugam cu include() fiecare fisier creat.

2. Application Base Directory

Application base directory se refera la directorul radacina care contine toate fisierele PHP care trebuie ascunse fata de clienti. Implicit, acest director este denumit protected si se afla in acelasi director cu fisierul php accesibil clientilor. Totusi, poate fi schimbat acest director prin proprietatea basePath din configuratia aplicatiei.

Tot ce este in acest director special ar trebui protejat fata de orice client WEB. Cu Apache HTTP server protectia se face foarte simplu printr-un fisier .htaccess pus in acest director. Continutul fisierului .htaccess este:

deny from all

3. Componente

Functionalitatea aplicatiei poate fi usor customizata si imbogatita datorita arhitecturii foarte flexibile de componente. Application gestioneaza un set de componente, fiecare implementand diverse features. De exemplu, application analizeaza o cerere client cu ajutorul componentelor CUrlManager si CHttpRequest.

Configurand proprietatea components, putem customiza orice valori ale componentelor folosite in aplicatie. De exemplu, putem configura componenta CMemCache pentru a folosi mai multe servere memcache:

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
)

Adaugam elementul cache la array-ul components. Elementul cache retine clasa folosita de componenta, clasa fiind CMemCache, iar proprietarea servers ar trebui initializata in acest fel.

ca sa accesam o componenta, folosim Yii::app()->ComponentID, unde ComponentID se refera la ID-ul componentei (ex. Yii::app()->cache).

O componenta poate fi dezactivata atribuind lui enabled valoarea false. Daca incercam sa accesam o componenta dezactivata, atunci primim null.

Sfat: Implicit, componentele sunt create la cerere. Ca rezultat, componenta nu va fi creata daca nu este accesata in timpul unei cereri client. Ca rezultat, performanta per ansamblu nu va scadea, chiar daca aplicatia are o configuratie cu foarte multe componente. Unele componente (ex. CLogRouter) poate ar trebui totusi sa fie create indiferent daca sunt accesate sau nu. Daca se doreste aces lucru, atunci ID-urile lor trebuie mentionate in lista memorata in proprietatea preload.

4. Componente nucleu

Yii activeaza implicit un set de componente nucleu pentru a asigura anumite features intalnite in majoritatea aplicatiilor Web. De exemplu, componenta request este folosita pentru a analiza cererile client si pentru a furniza informatii folositoare despre URL, cookies. Prin configurarea proprietatilor acestor componente nucleu, putem schimba comportamentul implicit al Yii aproape in orice privinta.

Mai jos este o lista de componente nucleu care sunt pre-declarate de catre CWebApplication.

5. Ciclul de viata al aplicatiei

Atunci cand se trateaza o cerere client, aplicatia va trece prin urmatoarele stadii:

  1. Seteaza tratarea de erori si autoloader-ul de clase;

  2. Inregistreaza componentele nucleu ale aplicatiei;

  3. Incarca configuratia aplicatiei;

  4. Initializeaza aplicatia cu CApplication::init()

    • Incarca componentele statice ale aplicatiei;
  5. Activeaza evenimentul onBeginRequest;

  6. Proceseaza cererea client:

    • Analizeaza cererea client;
    • Creaza controller-ul necesar;
    • Ruleaza controller-ul;
  7. Activeaza evenimentul onEndRequest;