Programarea cu Yii2 rutare și crearea URL-urilor

Dacă vă întrebați: "Ce este Yii?" verifică Introducere în Cadrul Yii, care analizează beneficiile Yii și include o prezentare generală a Yii 2.0.

Introducere în rutare

În această programare cu seria Yii2, ghid direct cititorii în folosirea cadrului Yii2 pentru PHP. 

În tutorialul de astăzi, voi examina rutarea și crearea de adrese URL în Yii. Când o solicitare de browser ajunge la fișierul index.php al aplicației Yii, trebuie să fie analizată pentru a determina ce controler și metodă să apeleze. Asta e ruta. Procesul invers al conectării la părți ale aplicației dvs. este crearea de adrese URL, care este cel mai bine realizat programabil.

Yii oferă o mare flexibilitate în gestionarea rutelor și generarea de linkuri. Urmați-mă pe măsură ce revizuiesc elementele de bază.

Înainte de a începe, amintiți-vă, încerc să particip la discuțiile de mai jos. Dacă aveți o întrebare sau o sugestie de subiect, vă rugăm să postați un comentariu de mai jos sau să mă contactați pe Twitter @reifman. 

Notă: Dacă ați observat diferența dintre episoadele de serie Programming Yii, este pentru că a trebuit să am operație pe creier anul trecut. Vă mulțumim pentru răbdarea și sprijinul dvs. - este bine să scrieți din nou în mod regulat și aștept cu nerăbdare să vă continuăm să reflectați Yii2.

fundal

Managerul de adrese URL al Yii este componenta aplicației care este utilizată pentru parsarea cererilor primite, parseRequest (), precum și pentru generarea programelor URL noi, createUrl ().

Solicitările sunt analizate pe rute, care iau acest formular:

ControllerID / ActionID

În esență, Managerul de adrese URL instruiește Yii ce procedură de comandă și de acțiune trebuie creată și invocată.

De-a lungul aplicației dvs., va trebui să generați adrese URL care pot fi analizate corespunzător atunci când sunt solicitate de utilizatori. Utilizarea createUrl () pentru aceasta se asigură că cererile de intrare pot fi cartografiate cu succes.

Iată un exemplu:

utilizați yii \ helpers \ Url; // Url :: pentru a apela UrlManager :: createUrl () pentru a crea un URL $ url = Url :: la (['message / view', 'id' => 100]);

Fără un cadru MVC, orice fișier PHP din aplicația dvs. poate răspunde direct la cereri, ceea ce înseamnă că trebuie să gestionați securitatea în fiecare fișier. Cu MVC și managerul de adrese URL, securitatea de bază este furnizată la nivel central, iar accesul la aplicația dvs. este destul de controlat. Acesta este unul dintre motivele cheie pentru a nu deranja în vanilla PHP-frameworks rock!

Să ne aruncăm în câteva detalii despre subiectul actual.

Routing

Solicitările de la utilizatori vin prin browserul de pe web către serverul dvs. sub formă de adrese URL. Să ne uităm la unul de la un utilizator care solicită o pagină de conectare în aplicația mea de serie de pornire, Planificator de întâlniri:

https://meetingplanner.io/index.php/site/login

Aplicația mea folosește numeroase URL-uri în Yii (descrise mai jos); observați mai puține variabile de interogare. Fără aceasta, adresa URL poate arăta astfel:

https://meetingplanner.io/index.php?r=site/login

In orice caz, parseRequest procesează adresa URL și creează și invocă siteController.php cu actionLogin ().

Cu adrese URL foarte bune, managerul de adrese URL va examina regulile înregistrate. În Planificatorul de întâlniri, acestea se află în fișierul de configurare comun:

"'=> [' urlManager '=> [' class '=>' yii \ web \ UrlManager '/'=>'/ view ','//'=>'/","/'=>'/',' defaultRoute '=>' / site / index ',],],

Dacă nu se potrivește nici o regulă sau dacă există o eroare la atingerea unui controler și a unei acțiuni, va fi aruncată o eroare 404, excepție yii \ web \ NotFoundHttpException.

Cu toate acestea, mai sus există o defaultroute setat pentru a merge la pagina de pornire de la SiteController actionIndex, care va acoperi solicitările de URL neegalat.

Să ne uităm mai aproape de una dintre regulile de mai sus:

'/'=>'/vedere',

Se spune că dacă primiți o cerere pentru un controler, urmată de un cuvânt (\ w+) urmată de un slash și un număr (\ d+), trimiteți această solicitare la fișierul controlerului cu numele corespunzător și invoca actionView ($ id) cu numărul, adică. întâlnirea / vizualizare / 130 apeluri MeetingController.php actionView (130).

Definiția regulilor dvs. este importantă și poate adăuga sau atenua performanța generală a site-ului dvs. sau timpul de răspuns. Poate doriți să aflați mai multe despre parametrii avansați ai rutelor Yii pentru a optimiza performanța. Regulile de scriere pot fi mai detaliate, pe care nu le voi intra astăzi.

Destul de adrese URL

Așa cum am menționat mai sus, URL-urile Destinație trec de la rutarea bazată pe parametri a lui Yii la o rutare bazată pe trasee. De exemplu, această adresă URL solicită vizionarea unei întâlniri cu ID 130.

https://meetingplanner.io/meeting/130

Sau această adresă URL solicită vizualizarea unui loc numit El Diablo Coffee:

https://meetingplanner.io/place/el-diablo-coffee-co

Poate doriți să citiți Cum să programați cu Yii2: Behavior Loyal (Envato Tuts +) pentru a afla mai multe despre punerea în aplicare a slugs pentru a gestiona aceste tipuri de URL-uri numite.

Pentru a activa Destinațiile URL, trebuie să activați enablePrettyUrl în urlManager:

'urlManager' => ['class' => 'yii \ web \ UrlManager', // Dezactiva index.php 'showScriptName' => false, array ('/'=>'/ view ','//'=>'/","/'=>'/',),],

Notă: În acest moment, puteți, de asemenea, să dezactivați index.php în URL cu showScriptName; cu toate acestea, încă mă lupt cu crearea URL-urilor fără index.php în proiectul meu actual de aplicație. Urmărirea acestui lucru este în lista de sarcini.

De asemenea, trebuie să creați un fișier .htaccess și să îl activați mod_rewrite pentru Apache:

RewriteEngine pe # Dacă există un director sau un fișier, utilizați-l direct RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # În caz contrar, trimiteți-l la index.php RewriteRule. index.php

Modul CatchAll

O altă caracteristică frumoasă a rutei Yii este capacitatea de a plasa cu ușurință aplicația în modul de întreținere. Doar definiți a prindele pe toate setarea în configurația, acțiunea și vizualizarea aplicației:

 dirname (dirname (__ DIR__)). '' / vânzător ',' limbă '=>' en ', // engleză' catchAll '=> [' site / offline '],' components '=> [' urlManager '=> 

Am adăugat și eu actionOffline în SiteController.php și o vizualizare offline.php.

Crearea de adrese URL

Yii oferă o metodă de ajutor yii \ helpers \ Url :: to () pentru a crea linkuri în cadrul aplicației dvs., care vor corespunde în mod corespunzător regulilor de parsare. Generarea de linkuri programate cu infrastructura Yii va ajuta la mentinerea manevrabilitatii si portabilitatii codului de aplicatie.

Iată câteva exemple de creare de adrese URL din documentația Yii:

utilizați yii \ helpers \ Url; // creează o adresă URL la un traseu: /index.php?r=post%2Findex echo Url :: la (['post / index']); // creează o adresă URL la un traseu cu parametrii: /index.php?r=post%2Fview&id=100 ecou Url :: la (['post / view', 'id' => 100]); // creează o adresă URL ancorată: /index.php?r=post%2Fview&id=100#content eco Url :: la (['post / view', 'id' => 100, '#' => 'conținut'] ); // creează o adresă URL absolută: http://www.example.com/index.php?r=post%2Findex eco Url :: la (['post / index'], true); // creează o adresă URL absolută utilizând schema https: https://www.example.com/index.php?r=post%2Findex echo Url :: la (['post / index'], 'https');

Bineînțeles, dacă este activat formatul URL foarte bun, adresele URL create vor fi diferite.

Iată un exemplu de generare de către mine a unui link în controlul grilei de întâlnire pentru Planificatorul întâlnirilor:

întoarcere '
$ Model-> id]). '">'. $ Model-> subiect. '
'$ Model-> getMeetingParticipants ($ Model-> id).'
„;

Am, de asemenea, o mulțime de linkuri în e-mailurile de ieșire pentru Planificatorul întâlnirilor, care necesită o serie de argumente identice pentru validarea accesului utilizatorilor. Am creat un ajutor pentru construirea acestor comenzi pe care le folosesc Url: la ():

clasa MiscHelpers funcția statică publică buildCommand ($ meeting_id, $ cmd = 0, $ obj_id = 0, $ actor_id = 0, $ auth_key = ") $ meeting_id, 'cmd' => $ cmd, 'actor_id' => $ actor_id, 'k' => $ auth_key, 'obj_id' => $ obj_id], true)

Scrierea de cod PHP brut pentru a crea manual link-uri ca acestea ar fi consumatoare de timp, predispuse la erori, și mai puțin portabil. Url :: la () salvează o mulțime de timp atât în ​​codare, cât și în depanare.

Notă: Voi scrie Asistenții Yii într-un episod viitoare. Folosirea unei funcții accesibile în cadrul asistentei mele mă salvează foarte mult și reduce codificarea globală.

În încheiere

Noțiuni de bază cu un MVC poate fi confuz și rutele și URL-urile pot juca un rol în acest lucru. Poate că ar fi trebuit să scriu despre rute mai devreme în serie. În orice caz, sper că ați învățat câteva lucruri noi despre Yii și despre designul aplicației flexibile cu rute și adrese URL.

Urmăriți tutorialele viitoare în programul nostru de programare cu seria Yii2 în timp ce continuăm să vă scufundăm în diferite aspecte ale cadrului. De exemplu, anunțați-ne dacă doriți să vedeți mai multe despre rutarea avansată. Salut cererile de teme și teme. Puteți să le postați în comentariile de mai jos sau puteți să ne trimiteți un e-mail pe site-ul meu Lookahead Consulting.

Dacă doriți să explorați acum o aplicație Yii2 mai avansată, verificați seria noastră de pornire și Planificatorul întâlnirilor. Aplicația este acum disponibilă în versiunea alpha și o puteți utiliza pentru a programa întâlniri cu prietenii. De asemenea, puteți descărca codul; este o sursă deschisă.

Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @reifman pe Twitter sau verificați pagina de instructor. Pagina mea de instructor va include toate articolele din această serie de îndată ce vor fi publicate. 

Link-uri conexe

  • Routing și creare URL - documentația Yii 2.0
  • Cum să programați cu Yii2: comportament slujitor (Envato Tuts +)
  • Yii2 Developer Exchange 
Cod