Programmazione con Yii2 routing e creazione di URL

Se stai chiedendo "Cos'è Yii?" check-out Introduzione al framework Yii, che rivede i vantaggi di Yii e include una panoramica di Yii 2.0.

Introduzione al routing

In questa serie di programmazione con Yii2, guido i lettori all'uso di Yii2 Framework per PHP. 

Nel tutorial di oggi, esaminerò il routing e la creazione di URL in Yii. Quando una richiesta del browser arriva al file index.php dell'applicazione Yii, deve essere analizzata per determinare quale controller e metodo chiamare. Questo è il routing. Il processo inverso di collegamento a parti della tua applicazione è la creazione di URL, che è meglio fare a livello di programmazione.

Yii offre molta flessibilità nella gestione del routing e nella generazione di collegamenti. Seguimi mentre rivedo le basi.

Prima di iniziare, ricorda, cerco di partecipare alle discussioni di seguito. Se hai una domanda o un suggerimento sull'argomento, per favore pubblica un commento qui sotto o contattami su Twitter @reifman. 

Nota: se hai notato il divario tra gli episodi della serie Programmazione Yii, è perché dovevo averlo chirurgia cerebrale l'anno scorso. Grazie per la vostra pazienza e supporto: è bello scrivere di nuovo regolarmente, e non vedo l'ora di continuare la copertura di Yii2.

sfondo

Il gestore URL di Yii è il componente dell'applicazione che viene utilizzato per analizzare le richieste in entrata, parseRequest (), oltre a generare nuovi URL a livello di codice, createUrl ().

Le richieste vengono analizzate in rotte, che hanno questa forma:

ControllerID / ActionID

In sostanza, URL Manager istruisce Yii su quale controller e metodo di azione creare e richiamare.

In tutta l'applicazione, dovrai generare URL che possano essere analizzati correttamente quando richiesto dagli utenti. utilizzando createUrl () per questo assicura che le richieste in entrata possano essere mappate con successo.

Ecco un esempio:

usa yii \ helpers \ Url; // Url :: to () chiama UrlManager :: createUrl () per creare un URL $ url = Url :: to (['message / view', 'id' => 100]);

Senza un framework MVC, qualsiasi file PHP nella tua applicazione può rispondere direttamente alle richieste, il che significa che devi gestire la sicurezza su ogni file. Con MVC e gestore URL, la sicurezza di base viene fornita a livello centrale e l'accesso alla tua applicazione è abbastanza controllato. Questa è una delle ragioni principali per non disturbare il rock-framework di vanilla!

Diamo un'occhiata a qualche altro dettaglio sull'argomento di oggi.

Routing

Le richieste degli utenti arrivano attraverso il browser sul web al tuo server sotto forma di URL. Diamo un'occhiata a uno da un utente che richiede una pagina di accesso all'applicazione della serie di avvio, Meeting Planner:

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

La mia applicazione utilizza piuttosto URL in Yii (descritto di seguito); notare meno variabili di query. Senza quello, l'URL potrebbe apparire come questo:

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

In ogni caso, parseRequest elabora l'URL e crea e invoca SiteController.php con actionLogin ().

Con URL carini, il gestore URL esaminerà le regole registrate. In Meeting Planner, si trovano nel file di configurazione comune:

'components' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', ... 'rules' => ['/'=>'/vista', '//'=>'/','/'=>'/',' defaultRoute '=>' / sito / indice ',],],

Se nessuna regola corrisponde o se c'è un errore nel raggiungere un controller e un'azione, verrà generata un'eccezione 404, eccezione yii \ web \ NotFoundHttpException.

Tuttavia, sopra c'è a defaultroute impostato per andare alla pagina iniziale su actionIndex di SiteController, che coprirà le richieste di URL senza corrispondenza.

Diamo un'occhiata più da vicino a una delle regole sopra:

'/'=>'/vista',

Si dice che se si riceve una richiesta per un controller seguito da una parola (\ w+) seguito da una barra e un numero (\ d+), invia quella richiesta al file del controller con nome corrispondente e invoca ActionView ($ id) con il numero, cioè. incontro / view / 130 chiamate MeetingController.php actionView (130).

La definizione delle regole è importante e può aumentare o diminuire le prestazioni generali del tuo sito o i tempi di risposta. Potresti voler saperne di più sulla parametrizzazione avanzata delle rotte di Yii per ottimizzare le prestazioni. Le regole di scrittura possono essere più dettagliate, che non entrerò oggi.

URL carini

Come accennato in precedenza, Pretty URL passa dall'instradamento basato su parametri di Yii a un instradamento basato sul percorso. Ad esempio, questo URL richiede la visualizzazione di una riunione con ID 130.

https://meetingplanner.io/meeting/130

O questo URL richiede la visualizzazione di un posto chiamato El Diablo Coffee:

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

Si consiglia di leggere Come programmare con Yii2: Comportamento Sluggable (Envato Tuts +) per saperne di più sull'implementazione degli slug per gestire questo tipo di URL nominati.

Per abilitare Pretty URL, è necessario attivare enablePrettyUrl nel urlManager:

'urlManager' => ['class' => 'yii \ web \ UrlManager', // Disabilita index.php 'showScriptName' => false, // Disabilita r = routes 'enablePrettyUrl' => true, 'rules' => array ('/'=>'/vista', '//'=>'/','/'=>'/',),],

Nota: A questo punto, puoi anche disabilitare index.php nell'URL con showScriptName; tuttavia, sto ancora lottando con la creazione di URL senza index.php nel mio attuale progetto applicativo. Tracciare questo verso il basso è nella mia lista dei compiti.

Devi anche creare un file .htaccess e abilitare mod_rewrite per Apache:

RewriteEngine on # Se esiste una directory o un file, utilizzalo direttamente RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # Altrimenti inoltralo a index.php RewriteRule. index.php

CatchAll Mode

Un'altra caratteristica interessante del routing Yii è la possibilità di collocare facilmente l'applicazione in modalità di manutenzione. Basta definire a Cattura Tutte impostazione nella configurazione dell'applicazione, azione e vista:

 dirname (dirname (__ DIR__)). '/ vendor', 'language' => 'en', // english 'catchAll' => ['site / offline'], 'components' => ['urlManager' => [ 

Ho anche aggiunto un actionOffline in SiteController.php e in una vista offline.php.

Creazione di URL

Yii fornisce un metodo di supporto yii \ helpers \ Url :: to () per creare collegamenti all'interno dell'applicazione che corrispondano correttamente alle regole di analisi. La generazione di collegamenti programmaticamente con l'infrastruttura di Yii contribuirà a mantenere la gestibilità e la portabilità del codice dell'applicazione.

Ecco alcuni esempi di creazione di URL dalla documentazione di Yii:

usa yii \ helpers \ Url; // crea un URL per una rotta: /index.php?r=post%2Findex echo Url :: to (['post / index']); // crea un URL per una rotta con parametri: /index.php?r=post%2Fview&id=100 echo Url :: to (['post / view', 'id' => 100]); // crea un URL ancorato: /index.php?r=post%2Fview&id=100#content echo Url :: to (['post / view', 'id' => 100, '#' => 'content'] ); // crea un URL assoluto: http://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], true); // crea un URL assoluto utilizzando lo schema https: https://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], 'https');

Naturalmente, se il bel formato URL è abilitato, gli URL creati saranno diversi.

Ecco un esempio di me che genera un collegamento nell'elenco Controllo griglia elenco riunioni per Meeting Planner:

ritorno '
$ Modello-> id]). '">'. $ Modello-> soggetto '.
'$ Modello-> getMeetingParticipants ($ modello-> id).'
';

Includo anche molti collegamenti nelle e-mail in uscita per Meeting Planner, che richiedono un numero di argomenti identici per la convalida dell'accesso degli utenti. Ho creato un helper per costruire questi comandi che usa Url: a ():

class MiscHelpers public static function buildCommand ($ meeting_id, $ cmd = 0, $ obj_id = 0, $ actor_id = 0, $ auth_key = ") return Url :: to (['meeting / command', 'id' => $ meeting_id, 'cmd' => $ cmd, 'actor_id' => $ actor_id, 'k' => $ auth_key, 'obj_id' => $ obj_id], vero);

Scrivere codice PHP grezzo per creare manualmente collegamenti come questi richiederebbe molto tempo, soggetto a errori e meno portabile. Url :: a () risparmia molto tempo sia nella codifica che nella risoluzione dei problemi.

Nota: Scriverò su Yii Helpers in un episodio imminente. L'utilizzo di una funzione comunemente accessibile all'interno del mio helper mi consente di risparmiare un sacco di sforzi e riduce la codifica complessiva.

In chiusura

Iniziare con un MVC può essere fonte di confusione e i percorsi e gli URL possono svolgere un ruolo in questo. Forse avrei dovuto scrivere delle rotte prima della serie. In ogni caso, spero che tu abbia imparato qualcosa di nuovo su Yii e sulla sua progettazione di applicazioni flessibili con percorsi e URL.

Guarda le prossime esercitazioni nella nostra serie Programming With Yii2 mentre continuiamo a esplorare i diversi aspetti del framework. Ad esempio, fammi sapere se desideri maggiori informazioni sul routing avanzato. Accolgo richieste di argomenti e argomenti. Puoi postarli nei commenti qui sotto o mandarmi una e-mail sul mio sito Web di Lookahead Consulting.

Se desideri esplorare un'applicazione Yii2 più avanzata ora, controlla le nostre serie di avvio e Meeting Planner. L'applicazione è ora in versione alpha e puoi usarla per programmare riunioni con gli amici. Puoi anche scaricare il codice; è open source.

Se vuoi sapere quando arriverà il prossimo tutorial di Yii2, seguimi @reifman su Twitter o controlla la mia pagina di istruttore. La mia pagina di istruttore includerà tutti gli articoli di questa serie non appena saranno pubblicati. 

Link correlati

  • Routing e creazione di URL: documentazione Yii 2.0
  • Come programmare con Yii2: Comportamento Sluggable (Envato Tuts +)
  • Yii2 Developer Exchange