В MVC какая разница между контроллером и маршрутизатором?

19

Означают ли они одно и то же (прикрепление URL-адресов к действиям или действия к URL-адресам) или есть какая-то разница, по которой я скучаю?

Пример: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk

thelolcat
источник
1
этот роутер для меня звучит как прославленный прокси
чокнутый урод
Вам нужна только модель (база данных), контроллер (который является маршрутизатором) и представление (страница). Вот и все. Если у вас есть маршрутизатор и контроллер, вы слишком усложнили его и просто используете маршрутизатор для передачи данных в контроллер. Контроллер - это Маршрутизатор, но Маршрутизатор не является Контроллером. Смотрите здесь code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
том

Ответы:

15

маршрутизатор:

Маршрутизация - это процесс получения конечной точки URI (той части URI, которая идет после базового URL-адреса) и разбиения ее на параметры, чтобы определить, какой модуль, контроллер и действие этого контроллера должны получить запрос.

контроллер:

Контроллер реализует шаблон «Контроллер», в котором все запросы перехватываются контроллером и отправляются отдельным контроллерам действий на основании запрошенного URL-адреса (то есть запроса маршрутизации от маршрутизатора).

Сэм Т
источник
4

Frontend-контроллер должен взаимодействовать с маршрутизатором и диспетчером , чтобы принимать решение в зависимости от запроса (HTTP) против применения какого конкретно действий должны быть выполнены , а затем отправляет его.

В зависимости от того, насколько подробно конструкция является, некоторые Диспетчерская сек работа без маршрутизатора s и они делают маршрутизации их или маршрутизации подразумевается в конструкции , как это происходит при обработке запроса.

Некоторый грузоотправитель ы также передать запрос объект на посланы методы действий . Методы действия затем частично разделяют запрос, так что даже действия контроллера все еще могут выполнять некоторую маршрутизацию на основе запроса. Типичным примером этого является случай, когда платформа предлагает сделать перенаправление в качестве ответа. Это также показывает, как связаны или находятся рядом маршрутизатор и контроллер .

Различие, которое обычно рисуется здесь, заключается в том, что маршрутизация заботится о том, какой метод действия выполнить, или помогает определить его, а контроллер отвечает за выполнение этого действия, но оба обрабатывают запрос.

Как видите, различия между маршрутизатором и контроллером могут сильно различаться между реализациями и средами . В конце концов, у конкретного приложения есть свои потребности, является ли определенный уровень абстракции полезным или стоит на пути.

Однако, исходя из условий, я бы сказал, что Controller играет более важную роль в общем приложении. Это где действие идет так сказать.

hakre
источник
3

Маршрут отображает URL на контроллер, который является действием. Иногда роли не очень хорошо разделены в зависимости от структуры.

Kevin
источник
2

Маршрутизаторы являются частью уровня контроллера. Механизм обработки маршрутизатора является заменой старого шаблона Front Controller (большой переключатель в index.php).

В современной среде маршрутизатор определяет прямую связь между «видом» возможных запросов и его процессором. Контроллер, напротив, получает только идентифицирующую информацию и анализирует эти данные в своем собственном контексте.

Давид Хорват
источник
0

Проще говоря, маршрутизатор решает задачу через приложение, обычно на основе внешнего ввода, такого как переменные GET или POST.

Маршрутизатор, однако, не является частью MVC, некоторые инфраструктуры MVC и HMVC используют маршрутизаторы, но это не привязывает их к шаблону MVC.

Кроме того, несколько ранних реализаций MVC, которые я видел, фактически полагались на файловое разделение действий с одним файлом на контроллер для доступа к отдельным контроллерам. Это намного лучше работает с приложением, потому что имея тощие контроллеры и более надежные модели, вам никогда не придется переходить к определенному методу в контроллере, и поэтому вы можете получить доступ к логике в одном месте (модели), что позволит вам комбинировать поведения.

MrMesees
источник
-1

Маршрутизатор принимает

запрос

и решает, какие методы контроллера / контроллера будут обрабатывать запрос.

Контроллер принимает запросы и обрабатывает их!

Теперь я также создал контроллер, который разделяет URL-адрес и использует первую часть после базового URL-адреса как контроллер, а вторую часть - как действие. Это загружает файл, соответствующий контроллеру, и метод в этом файле, соответствующий действию.

На самом деле это не контроллер (с точки зрения MVC), это часть маршрутизации.

Например, возьмите [GET] uri: example.com/article/view/123. Маршрутизатор MVC проанализирует uri и найдет следующие сегменты.

представление статьи 123 По умолчанию большинство маршрутизаторов теперь создают экземпляр articleController и вызывают его метод представления, передавая 123 в качестве параметра. (В качестве альтернативы вы можете использовать метод getUriSegment (сегментIdx), это выбор дизайна для вашей среды.)

ArticleController будет иметь метод view с параметром $ articleId. Этот метод, вероятно, будет делать что-то вроде: получить указанную статью (например, из БД через модель) и затем отобразить ее (возможно, вернув представление, которому была предоставлена ​​статья, возвращенная моделью.

Сиддарт Ньати
источник