Dans MVC, quelle est la différence entre le contrôleur et le routeur?

19

Signifient-ils la même chose (attacher des URL à des actions ou des actions à des URL) ou y a-t-il une différence qui me manque?

Exemple: http://github.com/dannyvankooten/PHP-Router vs http://konstrukt.dk

thelolcat
la source
1
ce routeur ressemble plus à un proxy glorifié pour moi
ratchet freak
Vous n'avez besoin que d'un modèle (base de données), d'un contrôleur (qui est le routeur) et de la vue (une page). C'est ça. Si vous avez un routeur et un contrôleur, vous l'avez trop compliqué et utilisez simplement le routeur pour transmettre des données à un contrôleur. Un contrôleur est un routeur, mais un routeur n'est pas un contrôleur. Voir ici code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
volume un

Réponses:

15

Routeur:

Le routage est le processus consistant à prendre un point de terminaison URI (la partie de l'URI qui vient après l'URL de base) et à le décomposer en paramètres pour déterminer le module, le contrôleur et l'action de ce contrôleur qui doivent recevoir la demande.

Manette:

Le contrôleur implémente un modèle de contrôleur, dans lequel toutes les demandes sont interceptées par le contrôleur et envoyées aux contrôleurs d'action individuels en fonction de l'URL demandée (c'est-à-dire la demande de routage du routeur).

Sam T
la source
4

Un contrôleur frontal doit collaborer avec un routeur et un répartiteur pour décider, sur la base de la demande (HTTP) de l' application, quelle action concrète doit être exécutée, puis la distribue.

Selon la façon dont la conception détaillée d' un est, un certain contrôleur de travail sans routeur s et ils font l'acheminement de leur propre ou le routage est implicite dans la conception la façon dont la demande est traitée.

Certains Dispatcher s passent également une demande objet au dépêché des méthodes d'action . Action Les méthodes se décomposent alors la demande en partie de sorte que même contrôleur actions peuvent encore faire un certain routage basé sur la demande. Un exemple typique est le cas où un framework propose de faire une redirection comme réponse. Cela montre également à quel point le routeur et le contrôleur sont liés ou proches .

La différence qui est normalement établie ici est que le routage prend en charge ou aide à identifier la méthode d'action à exécuter et que le contrôleur est alors responsable de fournir cette action, mais les deux gèrent la demande.

Comme vous pouvez le voir, les différences entre le routeur et le contrôleur peuvent varier considérablement entre les implémentations et les cadres. En fin de compte, l'application concrète a ses besoins, qu'un certain niveau d'abstraction soit utile ou non.

Cependant, d'après les termes, je dirais que le contrôleur joue un rôle plus élevé dans l'application globale. C'est là que va l'action pour ainsi dire.

hakre
la source
3

L'itinéraire mappe une URL à un contrôleur, ce qui est l'action. Parfois, les rôles ne sont pas vraiment très bien séparés selon le cadre.

Kevin
la source
2

Les routeurs font partie de la couche contrôleur. Le mécanisme de traitement du routeur remplace le modèle de contrôleur frontal de la vieille école (le gros commutateur dans index.php).

Dans un cadre moderne, un routeur définit une connexion directe entre un "type" de requêtes possibles et son processeur. En revanche, un contrôleur obtient simplement des informations d'identification et analyse ces données dans son propre contexte.

Dávid Horváth
la source
0

Tout simplement un routeur élabore un parcours à travers l'application, généralement basé sur des entrées externes telles que les variables GET ou POST.

Un routeur ne fait cependant pas partie d'un MVC, plusieurs frameworks MVC et HMVC utilisent des routeurs, mais cela ne les lie pas au modèle de MVC.

De plus, plusieurs premières implémentations de MVC que j'ai vues reposaient en fait sur la séparation des actions basée sur des fichiers avec un fichier par contrôleur pour accéder à des contrôleurs distincts. Cela sert bien mieux l'application, car en ayant des contrôleurs maigres, avec des modèles plus robustes, vous n'avez jamais à faire défiler jusqu'à une méthode particulière dans le contrôleur, et vous pouvez donc accéder à la logique en un seul endroit (le modèle), ce qui vous permet de composer comportements.

MrMesees
la source
-1

Le routeur prend le

demande

et décide quel contrôleur / méthodes de contrôleur traitera la demande.

Le contrôleur accepte les demandes et les traite!

Maintenant, j'ai également créé un contrôleur qui divise l'URL et utilise la première partie après l'URL de base comme contrôleur et la deuxième partie comme action. Cela charge un fichier correspondant au contrôleur et une méthode dans ce fichier correspondant à l'action.

Ce n'est pas vraiment un contrôleur (en ce qui concerne MVC), il fait partie du routage.

Par exemple, prenez l'URI [GET]: example.com/article/view/123 Le routeur MVC analysera l'uri et trouvera les segments suivants

article view 123 Par défaut, la plupart des routeurs instancient désormais l'articleController et appellent sa méthode view en passant 123 comme paramètre. (Vous pouvez également avoir une méthode getUriSegment (segmentIdx), c'est un choix de conception pour votre framework.)

L'ArticleController aurait une méthode d'affichage avec un paramètre $ articleId. Cette méthode ferait probablement quelque chose comme: récupérer l'article spécifié (à partir d'une base de données via un modèle par exemple) puis l'afficher (probablement en renvoyant une vue à laquelle l'article renvoyé par le modèle a été donné)

Siddarth Nyati
la source