ProgWebAv Dispatcher

Dispatcher

Dans les implémentations du design pattern Model View Controller, une pièce nommée dispatcher ou router est souvent rajoutée. Son rôle principal et de faire correspondre un “nommage particulier” des accès aux services applicatifs vers le contrôleur associé. Dans le cas des applications Web, le consommateur des services étant un browser, il est donc logique que ce nommage soit constitué d’URL. Il existe plusieurs bonnes pratiques pour des systèmes de nommage des URL en relation avec une application en MVC. Un exemple d’une de ces bonnes pratiques serait d’utiliser les deux derniers segments d’une l’URL pour identifier le controller et l’action. Ainsi l’url suivante:

http://www.example.com/news/show

correspondrait à l’action show du controller News. Un autre exemple de bonne pratique est l’architecture REST qui en plus de jouer avec l’URL, joue avec les méthodes ou verbs HTTP.

Une fois ce nommage clairement spécifié, le serveur Web doit faire correspondre les URL aux bonnes actions (méthodes) des bons contrôleurs. Par défaut, c’est justement l’application fournissant le service de Web Server (le serveur Apache par exemple) qui s’occupe de cela, mais il est plus puissant de bénéficier d’un langage de programmation pour s’occuper de ce dispatch. La pratique courante est donc de configurer le Web Server afin qu'il redirige toutes les requêtes vers un unique point de contrôle qui s’occupera du dispatch. C’est ce point de contrôle que l’on appelle disptacher ou router. Puisque celui-ci reçoit toutes les requêtes (sous la forme d’URL) de notre application, il doit donc faire une analyse des URL afin d’exécuter la bonne section de code correspondante (la bonne action d’un contrôleur).

1) Routage Laravel

Evidement, Les frameworks MVC offrent presque tous: soit un dispatch automatisé (framework de haut niveau) , soit un dispatch plus malléable (framework de bas niveau). Dans le cas de Laravel, le routage est plutôt de bas niveau mais possède quand même quelques fonctionnalités de haut niveau.

1.a) Routage de bas niveau dans Laravel.

La première possibilité de routage de Laravel est de spécifier le verbe HTTP et l'URL à relier à une section de code. La syntaxe est la suivante:

Route::verb(url, ...);

ou verb est à remplacer par le verbe HTTP adéquat, et url par l’url spécifié par votre choix de nommage. Pour le système de nommage en exemple au début de ce document (http://www.example.com/news/show) il faudrait donc écrire:

Route::get('/news/show', ... )

La plupart du temps, si le système de nommage choisit ne prend pas en compte le verbe HTTP, il est de bonne pratique d’utiliser GET puisque c’est le verbe par défaut utilisé par les browsers. Si vous voulez que votre route corresponde à tous les verbes disponibles il est possible de le faire avec:

Route::any('/news/show', ... )

les … présent dans ces exemples sont à remplacer par le code associé à l’URL (appelée route par la suite). Laravel offre la possibilité de mettre le code directement sous la forme d’une fonction anonyme (une closure), ou d’exécuter une méthode (action) d’un contrôleur. Voici les deux syntaxes:

Sans MVC:

Route::get('/news/show', function () {
    return 'La liste des news est: .... ';
})

Avec MVC:

Route::get('/news/show', 'NewsController@show');

Exercices:

1)Réalisez toutes les routes nécessaires pour une galerie de photos qui aurait uniquement les fonctionnalités suivantes:

2) Laravel offre d’autres fonctionnalités pratiques pour le routage. Par exemple, il est possible de spécifier des parties dynamiques dans l’URL afin de faire correspondre plusieurs URL à une méthode. Vous trouverez des exemples de syntaxe sur le site officiel.

Réalisez toutes les routes necéssaires à une architecture REST pour une ressource nommée “user”.

3)Laravel offre deux méthodes de routage de haut niveau: controller et resource

La première permet un routage automatique des URL vers un contrôleur. La syntaxe est la suivante:

Route::controller('/news', 'NewsController');

Laravel va alors automatiquement rediriger les URL commençant par /news vers le controller spécifié. Le verbe HTTP ainsi que la partie qui suit /news dans l’URL permettra à Laravel de savoir quelle méthode du controller il doit exécuter. Par exemple, pour:

GET http://www.example.com/news/show

Laravel exécutera la méthode getShow du contrôleur NewsController.

Finalement, la deuxième méthode de routage de haut niveau nommée resource, permet de faire un routage automatique en suivant l’architecture REST.

Essayez donc de remplacer vos routes de l'exercice 1) par un routage de type "controller" et vos route de l'exercice 2) par un routage de type "resource" (REST).