Elementele de bază sunt controlerul, ghidul definitiv pentru yii, frameworkul yii php

Un controler este o instanță a clasei CController sau o clasă moștenită de la ea. Acesta este creat de obiectul aplicației atunci când utilizatorul o cere. La pornire, controlerul efectuează acțiunea corespunzătoare, care de obicei presupune crearea modelelor corespunzătoare și afișarea vederilor necesare. În cel mai simplu caz, o acțiune este o metodă a unei clase de controlor al cărei nume începe cu o acțiune.







Controlorul are o acțiune prestabilită, care se efectuează în cazul în care utilizatorul nu specifică acțiunea la cerere. În mod implicit, această acțiune se numește index. Puteți să o modificați setând valoarea CController :: defaultAction.

Următorul cod definește controlerul site-ului cu acțiuni index (acțiunea implicită) și contactați:

1. Calea ¶

Controlorii și acțiunile sunt identificați prin identificatorii lor. ID-ul controlerului este o înregistrare a căii de format / to / xyz. corespunzând fișierului de clasă al controlorului protejat / controlorilor / căii / către / XyzController.php. unde xyz ar trebui înlocuit cu un nume de clasă reală (de exemplu, postul corespunde cu protejate / controlori / PostController.php). ID-ul de acțiune este numele metodei fără prefixul de acțiune. De exemplu, dacă clasa controlerului conține metoda actionEdit. atunci se modifică identificatorul acțiunii corespunzătoare.

Notă: în mod prestabilit, rutele sunt sensibile la minuscule. Acest lucru poate fi modificat prin setarea proprietății CUrlManager :: caseSensitive la fals în configurația aplicației. În modul sensibil fără caz, asigurați-vă că numele directorului care conține fișierele de clasă controler sunt mici și că harta controlerului și harta de acțiune utilizează tastele în litere mici.

Aplicația poate conține module. Traseul spre acțiunea controlerului din interiorul modulului este specificat în modul moduleID / controllerID / actionID. Pentru mai multe informații, consultați secțiunea modulelor.

2. Crearea unei instanțe a controlorului ¶

O instanță a controlerului este creată atunci când CWebApplication procesează cererea de intrare. După primirea ID-ului controlerului, aplicația folosește următoarele reguli pentru a determina clasa controlerului și locația sa:

dacă este setată proprietatea CWebApplication :: catchAllRequest. controlerul va fi creat pe baza acestei proprietăți, iar controlerul solicitat de utilizator va fi ignorat. De obicei, aceasta se utilizează pentru a seta aplicația în modul de întreținere și a afișa o pagină statică cu mesajul corespunzător;

dacă ID-ul controlerului se găsește în CWebApplication :: controllerMap. atunci se va utiliza o configurație corespunzătoare a controlerului pentru a crea instanța controlerului;

Dacă identificatorul controlerului corespunde formatului "path / to / xyz". atunci numele clasei de controler este definit ca XyzController. și clasa corespunzătoare ca protejate / controlere / cale / către / XyzController.php. De exemplu, identificatorul controlerului de administrator / utilizator va corespunde clasei de controler - UserController și file protected / controllers / admin / UserController.php. Dacă fișierul nu există, va fi generat un CHttpException cu un cod de eroare de 404.

Când se utilizează module, procesul descris mai sus va arăta diferit. În special, aplicația va verifica dacă identificatorul se potrivește cu controlerul din interiorul modulului. Dacă se potrivește, va fi creată mai întâi o instanță a modulului și apoi o instanță a controlerului.







3. Acțiune ¶

După cum sa menționat mai sus, o acțiune este o metodă al cărei nume începe cu o acțiune. Un mod mai avansat este de a crea o clasă de acțiune și de a spune controlorului să instanțizeze această clasă, dacă este necesar. Această abordare vă permite să reutilizați acțiunile.

Pentru a crea o clasă de acțiune, trebuie să faceți următoarele:

Pentru a face controlerul conștient de această acțiune, trebuie să suprascrieți metoda actions () din clasa controlerului:

În codul de mai sus, folosim aliasul aplicației route.controllers.post.UpdateAction pentru a specifica clasa de acțiune protected / controllers / post / UpdateAction.php. Creând acțiuni bazate pe clase, puteți organiza aplicația într-un mod modular. De exemplu, următoarea structură de directoare poate fi utilizată pentru a organiza codul de controler:

Setări de acțiune snap

De la versiunea 1.1.4, Yii a reușit să legare automat parametrii de acțiunile controlerului. Adică, puteți specifica parametrii numiți, în care valorile corespunzătoare din $ _GET vor cădea automat.

Pentru a arăta cum funcționează acest lucru, să presupunem că trebuie să implementăm acțiunea de creare a controlerului PostController. Acțiunea are doi parametri:

Cel mai probabil, pentru a obține parametrii de la $ _GET în controler, trebuie să scriem următorul cod plictisitor:

Folosind parametrii de acțiune, putem obține un cod mai plăcut:

Adăugăm doi parametri în metoda actionCreate. Numele fiecăruia trebuie să se potrivească exact cu una dintre tastele din $ _GET. Parametrul lingvistic $ este setat la valoarea implicită en. care se utilizează dacă nu există parametru corespunzător în interogare. Deoarece categoria $ nu are o valoare implicită, dacă nu există parametru corespunzător în interogare, excepția CHttpException va fi aruncată automat (cu codul de eroare 400).

Din versiunea 1.1.5, Yii acceptă specificarea matricelor ca parametri de acțiune. Puteți să le utilizați după cum urmează:

Adăugăm matricea de cuvinte cheie înainte de parametrul categoriilor $. Ca rezultat, dacă $ _GET ['categories'] este un șir simplu, acesta va fi distribuit într-o matrice care conține șirul original.

Notă: Dacă parametrul este declarat fără a specifica tipul de matrice. atunci trebuie să fie scalar (adică nu o matrice). În acest caz, trecerea matricei prin parametrul $ _GET va duce la o excepție HTTP.

Începând cu versiunea 1.1.7, legarea parametrilor automați funcționează cu acțiuni organizate sub formă de clase. Dacă metoda de rulare () din clasa de acțiune este descrisă cu parametri, acești parametri sunt completați cu valorile corespunzătoare din cererea HTTP:

4. Filtre ¶

Un filtru este o bucată de cod care poate fi executată înainte sau după acțiunea controlerului, în funcție de configurație. De exemplu, filtrul de control al accesului poate verifica dacă utilizatorul este autentificat înainte de efectuarea acțiunii solicitate. Un filtru de monitorizare a performanței poate fi utilizat pentru a determina timpul necesar pentru efectuarea unei acțiuni.

O acțiune poate avea mai multe filtre. Filtrele sunt lansate în ordinea în care sunt listate în lista de filtre, iar filtrul poate împiedica executarea acțiunii și a filtrelor ulterioare.

Un filtru poate fi definit ca o metodă a unei clase de controler. Numele metodei trebuie să înceapă cu filtrul. De exemplu, metoda filterAccessControl definește filtrul accessControl. Metoda de filtrare ar trebui să arate astfel:

unde $ filterChain este o instanță a clasei CFilterChain. care este o listă de filtre asociate acțiunii solicitate. În codul de filtrare, puteți apela $ filterChain-> run () pentru a continua execuția filtrelor și acțiunilor ulterioare.

Un filtru poate fi, de asemenea, o instanță a clasei CFilter sau a derivatului său. Următorul cod definește o nouă clasă de filtre:

Pentru a aplica un filtru unei acțiuni, trebuie să înlocuiți metoda CController :: filters (). Returnează o serie de configurații ale filtrelor. De exemplu:

Acest cod definește două filtre: postOnly și PerformanceFilter. Filtrul postOnly este specificat ca metodă (metoda corespunzătoare este deja definită în CController), în timp ce PerformanceFilter este un filtru bazat pe clasă. Aplicația alias application.filters.PerformanceFilter indică fișierul de clasă filtru - protected / filters / PerformanceFilter. Configurația PerformanceFilter utilizează o matrice care vă permite să setați valorile inițiale ale proprietăților filtrului. În acest caz, proprietatea unitară a PerformanceFilter va fi inițializată cu valoarea "secundă".

Folosind operatorii "+" și "-", puteți specifica acțiunile la care ar trebui și nu ar trebui să se aplice filtrul. În exemplul de mai sus, postOnly va fi aplicat acțiunilor de editare și de creare. și PerformanceFilter - la toate acțiunile, cu excepția modificării și creării. Dacă operatorii "+" și "-" nu sunt specificați, filtrul va fi aplicat tuturor acțiunilor.







Trimiteți-le prietenilor: