Означают ли они одно и то же (прикрепление URL-адресов к действиям или действия к URL-адресам) или есть какая-то разница, по которой я скучаю?
Пример: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk
Означают ли они одно и то же (прикрепление URL-адресов к действиям или действия к URL-адресам) или есть какая-то разница, по которой я скучаю?
Пример: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk
Ответы:
маршрутизатор:
Маршрутизация - это процесс получения конечной точки URI (той части URI, которая идет после базового URL-адреса) и разбиения ее на параметры, чтобы определить, какой модуль, контроллер и действие этого контроллера должны получить запрос.
контроллер:
Контроллер реализует шаблон «Контроллер», в котором все запросы перехватываются контроллером и отправляются отдельным контроллерам действий на основании запрошенного URL-адреса (то есть запроса маршрутизации от маршрутизатора).
Frontend-контроллер должен взаимодействовать с маршрутизатором и диспетчером , чтобы принимать решение в зависимости от запроса (HTTP) против применения какого конкретно действий должны быть выполнены , а затем отправляет его.
В зависимости от того, насколько подробно конструкция является, некоторые Диспетчерская сек работа без маршрутизатора s и они делают маршрутизации их или маршрутизации подразумевается в конструкции , как это происходит при обработке запроса.
Некоторый грузоотправитель ы также передать запрос объект на посланы методы действий . Методы действия затем частично разделяют запрос, так что даже действия контроллера все еще могут выполнять некоторую маршрутизацию на основе запроса. Типичным примером этого является случай, когда платформа предлагает сделать перенаправление в качестве ответа. Это также показывает, как связаны или находятся рядом маршрутизатор и контроллер .
Различие, которое обычно рисуется здесь, заключается в том, что маршрутизация заботится о том, какой метод действия выполнить, или помогает определить его, а контроллер отвечает за выполнение этого действия, но оба обрабатывают запрос.
Как видите, различия между маршрутизатором и контроллером могут сильно различаться между реализациями и средами . В конце концов, у конкретного приложения есть свои потребности, является ли определенный уровень абстракции полезным или стоит на пути.
Однако, исходя из условий, я бы сказал, что Controller играет более важную роль в общем приложении. Это где действие идет так сказать.
Маршрутизаторы являются частью уровня контроллера. Механизм обработки маршрутизатора является заменой старого шаблона Front Controller (большой переключатель в index.php).
В современной среде маршрутизатор определяет прямую связь между «видом» возможных запросов и его процессором. Контроллер, напротив, получает только идентифицирующую информацию и анализирует эти данные в своем собственном контексте.
Проще говоря, маршрутизатор решает задачу через приложение, обычно на основе внешнего ввода, такого как переменные GET или POST.
Маршрутизатор, однако, не является частью MVC, некоторые инфраструктуры MVC и HMVC используют маршрутизаторы, но это не привязывает их к шаблону MVC.
Кроме того, несколько ранних реализаций MVC, которые я видел, фактически полагались на файловое разделение действий с одним файлом на контроллер для доступа к отдельным контроллерам. Это намного лучше работает с приложением, потому что имея тощие контроллеры и более надежные модели, вам никогда не придется переходить к определенному методу в контроллере, и поэтому вы можете получить доступ к логике в одном месте (модели), что позволит вам комбинировать поведения.
Маршрутизатор принимает
запрос
и решает, какие методы контроллера / контроллера будут обрабатывать запрос.
Контроллер принимает запросы и обрабатывает их!
Теперь я также создал контроллер, который разделяет URL-адрес и использует первую часть после базового URL-адреса как контроллер, а вторую часть - как действие. Это загружает файл, соответствующий контроллеру, и метод в этом файле, соответствующий действию.
На самом деле это не контроллер (с точки зрения MVC), это часть маршрутизации.
Например, возьмите [GET] uri: example.com/article/view/123. Маршрутизатор MVC проанализирует uri и найдет следующие сегменты.
представление статьи 123 По умолчанию большинство маршрутизаторов теперь создают экземпляр articleController и вызывают его метод представления, передавая 123 в качестве параметра. (В качестве альтернативы вы можете использовать метод getUriSegment (сегментIdx), это выбор дизайна для вашей среды.)
ArticleController будет иметь метод view с параметром $ articleId. Этот метод, вероятно, будет делать что-то вроде: получить указанную статью (например, из БД через модель) и затем отобразить ее (возможно, вернув представление, которому была предоставлена статья, возвращенная моделью.