Programmation avec Yii2 routage et création d'URL

Si vous demandez, "Qu'est-ce que Yii?" check-out Introduction au framework Yii, qui passe en revue les avantages de Yii et comprend un aperçu de Yii 2.0.

Introduction au routage

Dans cette série de programmation avec Yii2, je guide les lecteurs dans l'utilisation du framework Yii2 pour PHP. 

Dans le tutoriel d'aujourd'hui, je vais passer en revue le routage et la création d'URL dans Yii. Lorsqu'une demande de navigateur parvient au fichier index.php de votre application Yii, il doit être analysé pour déterminer le contrôleur et la méthode à appeler. C'est le routage. Le processus inverse de la liaison à des parties de votre application est la création d'URL, qu'il est préférable de faire par programme..

Yii offre une grande flexibilité dans la gestion du routage et la génération de liens. Suivez-moi pendant que je passe en revue les bases.

Avant de commencer, rappelez-vous que j’essaie de participer aux discussions ci-dessous. Si vous avez une question ou une suggestion de sujet, veuillez poster un commentaire ci-dessous ou contactez-moi sur Twitter @reifman. 

Remarque: si vous avez constaté un écart entre les épisodes de la série Programmation Yii, c’est parce que j’ai dû chirurgie du cerveau l'année dernière. Nous vous remercions de votre patience et de votre soutien. Je suis heureux de pouvoir écrire de nouveau régulièrement et je suis impatient de poursuivre la couverture de Yii2..

Contexte

Le gestionnaire d'URL de Yii est le composant d'application utilisé pour analyser les demandes entrantes, parseRequest (), ainsi que pour générer de nouvelles URL par programme, createUrl ()..

Les demandes sont analysées dans les itinéraires, qui prennent cette forme:

ControllerID / ActionID

Pour l’essentiel, URL Manager indique à Yii le contrôleur et la méthode d’action à créer et à appeler..

Tout au long de votre application, vous devez générer des URL qui peuvent être correctement analysées à la demande des utilisateurs. En utilisant createUrl () car cela garantit que les demandes entrantes peuvent être mappées avec succès.

Voici un exemple:

utilisez yii \ helpers \ Url; // Url :: to () appelle UrlManager :: createUrl () pour créer une URL $ url = Url :: to (['message / view', 'id' => 100]);

Sans structure MVC, tout fichier PHP de votre application peut répondre directement aux demandes, ce qui signifie que vous devez gérer la sécurité de chaque fichier. Avec MVC et le gestionnaire d'URL, la sécurité de base est fournie à un niveau central et l'accès à votre application est relativement contrôlé. C’est l’une des principales raisons de ne pas s’embêter dans le framework PHP vanille.!

Passons à quelques détails supplémentaires sur le sujet d'aujourd'hui.

Routage

Les demandes des utilisateurs arrivent via votre navigateur par le Web sur votre serveur sous la forme d'URL. Voyons l'une des demandes d'un utilisateur demandant une page de connexion sur mon application de démarrage, Meeting Planner:

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

Mon application utilise de jolies URL en Yii (décrit ci-dessous); remarquez moins de variables de requête. Sans cela, l'URL pourrait ressembler à ceci:

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

Dans tout les cas, parseRequest traite l'URL et crée et appelle SiteController.php avec actionLogin ().

Avec de jolies URL, le gestionnaire d'URL examinera les règles enregistrées. Dans Meeting Planner, ils se trouvent dans le fichier de configuration commun:

'composants' => ['urlManager' => ['class' => 'yii \ web \ UrlManager',… 'rules' => ['/'=>'/vue', '//'=>'/','/'=>'/',' defaultRoute '=>' / site / index ',],],

Si aucune règle ne correspond ou s'il y a une erreur touchant un contrôleur et une action, une erreur 404, exception yii \ web \ NotFoundHttpException, sera levée..

Cependant, au dessus il y a un defaultRoute défini pour accéder à la page d'accueil de ActionIndex de SiteController, qui couvrira les demandes d'URL sans correspondance.

Regardons de plus près l'une des règles ci-dessus:

'/'=>'/vue',

Il est dit que si vous recevez une demande pour un contrôleur suivi d’un mot (\ w+) suivie d'une barre oblique et d'un nombre (\ré+), envoyez cette demande au fichier du contrôleur avec le nom correspondant et appelez actionView ($ id) avec le numéro, c'est-à-dire. réunion / vue / 130 appels MeetingController.php actionView (130).

La définition de vos règles est importante et peut augmenter ou diminuer les performances globales de votre site ou le temps de réponse. Vous voudrez peut-être en savoir plus sur le paramétrage avancé des routes par Yii pour optimiser les performances. L'écriture de règles peut être plus détaillée, ce que je ne vais pas aborder aujourd'hui.

Jolies URL

Comme je l'ai mentionné ci-dessus, Pretty URLs bascule du routage basé sur les paramètres de Yii à un routage basé sur le chemin. Par exemple, cette URL demande l'affichage d'une réunion avec l'ID 130.

https://meetingplanner.io/meeting/130

Ou cette URL demande à voir un endroit appelé El Diablo Coffee:

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

Vous voudrez peut-être lire Comment programmer avec Yii2: Comportement sluggable (Envato Tuts +) pour en savoir plus sur l'implémentation de slugs pour gérer ces types d'URL nommées.

Pour activer Pretty URLs, vous devez activer enablePrettyUrl dans urlManager:

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

Remarque: À ce stade, vous pouvez également désactiver index.php dans l’URL avec showScriptName; Cependant, je ne parviens pas à créer des URL sans index.php dans mon projet d'application actuel. Ce suivi est sur ma liste de tâches.

Vous devez également créer un fichier .htaccess et activer mod_rewrite pour Apache:

RewriteEngine on # Si un répertoire ou un fichier existe, utilisez-le directement RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # Sinon, transférez-le à index.php RewriteRule. index.php

Mode CatchAll

Une autre fonctionnalité intéressante du routage Yii est la possibilité de placer facilement votre application en mode maintenance. Il suffit de définir un attraperTous réglage dans la configuration, l'action et la vue de l'application:

 dirname (dirname (__ DIR__)). '/ vendor', 'language' => 'fr', // anglais 'catchAll' => ['site / hors ligne'], 'composants' => ['urlManager' => [ 

J'ai aussi ajouté un actionOffline dans SiteController.php et une vue offline.php.

Création d'URL

Yii fournit une méthode d'assistance yii \ helpers \ Url :: to () pour créer des liens dans votre application qui correspondront correctement aux règles d'analyse. La génération programmée de liens avec l'infrastructure de Yii aidera à maintenir la facilité de gestion et la portabilité de votre code d'application..

Voici quelques exemples de création d'URL à partir de la documentation de Yii:

utilisez yii \ helpers \ Url; // crée une URL vers une route: /index.php?r=post%2Findex echo Url :: to (['post / index']); // crée une URL vers une route avec des paramètres: /index.php?r=post%2Fview&id=100 echo Url :: to (['post / view', 'id' => 100]); // crée une URL ancrée: /index.php?r=post%2Fview&id=100#content echo Url :: to (['post / view', 'id' => 100, '#' => 'contenu'] ) // crée une URL absolue: http://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], true); // crée une URL absolue en utilisant le schéma https: https://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], 'https');

Bien sûr, si le joli format d'URL est activé, les URL créées seront différentes.

Voici un exemple de ma génération d'un lien dans le contrôle de grille de la liste de réunions pour le planificateur de réunions:

revenir '
$ model-> id]). '">'. $ model-> subject. '
'. $ model-> getMeetingParticipants ($ model-> id).'
';

J'inclus également de nombreux liens dans les e-mails sortants pour Meeting Planner, qui nécessitent un nombre d'arguments identiques pour valider l'accès des utilisateurs. J'ai créé un assistant pour construire ces commandes qui utilise Url: to ():

class MiscHelpers fonction statique publique 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], true);

Écrire du code PHP brut pour créer manuellement des liens comme ceux-ci prendrait beaucoup de temps, serait source d'erreurs et serait moins portable. Url :: to () fait gagner beaucoup de temps à la fois en codage et en dépannage.

Remarque: Je vais écrire à propos de Yii Aides dans un prochain épisode. Utiliser une fonction couramment accessible dans mon assistant me permet d’économiser beaucoup d’efforts et de réduire le codage général.

En clôture

Démarrer avec un MVC peut être déroutant et les routes et les URL peuvent jouer un rôle à cet égard. J'aurais peut-être dû écrire sur les itinéraires plus tôt dans la série. Quoi qu'il en soit, j'espère que vous avez appris de nouvelles choses sur Yii et sur la conception flexible de ses applications avec des itinéraires et des URL..

Surveillez les prochains tutoriels de notre série Programmation avec Yii2 pendant que nous continuons à plonger dans différents aspects du cadre. Par exemple, faites-moi savoir si vous souhaitez en savoir plus sur le routage avancé. Je me félicite des demandes de fonctionnalités et de sujets. Vous pouvez les poster dans les commentaires ci-dessous ou m'envoyer un email sur mon site Lookahead Consulting.

Si vous souhaitez explorer une application Yii2 plus avancée maintenant, consultez notre série de démarrage et notre planificateur de réunions. L'application est maintenant en version alpha et vous pouvez l'utiliser pour planifier des réunions avec des amis. Vous pouvez également télécharger le code; c'est open source.

Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi @reifman sur Twitter ou consultez ma page d'instructeur. Ma page d’instructeur comprendra tous les articles de cette série dès leur publication.. 

Liens connexes

  • Routage et création d'URL-Yii 2.0 Documentation
  • Comment programmer avec Yii2: Comportement sluggable (Envato Tuts +)
  • Yii2 Developer Exchange