Почему в PHP-фреймворках используется концепция «маршрута»?

31

Я спрашиваю об этом потому, что PHP-скрипт не является маршрутом? Например, если у вас есть article.php, тогда ваш маршрут просто http://mysite.com/article.php .

Зачем дальше абстрагироваться от концепции маршрута, если он уже существует в виде простого файла?

Райан
источник

Ответы:

44

Чтобы понять, что делает маршрутизатор, вы должны сначала понять, что такое механизм перезаписи. Из статьи Википедии (выделено мое):

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

Когда используется механизм перезаписи, у вас нет соотношения 1: 1 между URL и скриптом PHP. Пример из той же статьи:

http://example.com/wiki/index.php?title=Page_title

можно переписать как:

http://example.com/wiki/Page_title

Существуют различные преимущества использования техники. Поскольку PHP обычно тесно связан с Apache, наиболее часто используемый механизм переписывания - это Apache mod_rewrite .

Если вы хотите переписать URL-адреса, вам нужна какая-то маршрутизация, так как маршрутизация - это процесс взятия URL-адреса, разбиения его на компоненты и определения того, какой скрипт будет вызываться. Страница документации для стандартного маршрутизатора Zend Framework объясняет процесс следующим образом:

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

В настоящее время большинство PHP-фреймворков основаны на шаблоне MVC , а на MVC-фреймворке процесс выглядит примерно так * :

  1. Браузер указывает на URL,
  2. Веб-сервер перехватывает запрос и перенаправляет его в общую точку входа, обычно в index.phpскрипт,
  3. index.php получает URL и запускает процесс маршрутизации.
  4. URL разбивается на параметры, где первый - это контроллер, второй - метод действия, а остальные считаются динамическими параметрами,
  5. Если существует класс контроллера, соответствующий первому параметру, создается экземпляр объекта контроллера,
  6. Метод действия, который обычно является функцией объекта контроллера, вызывается, и его возвращение - это то, что фактически возвращается браузеру.

Сопоставление параметров с контроллерами и методами обычно использует сопоставление с помощью регулярных выражений, чтобы иметь возможность обрабатывать сложные и динамические шаблоны маршрутизации, известные как маршруты. Хорошие примеры маршрутов можно найти на странице документации CodeIgniter по маршрутизации URI :

$ route ['journals'] = "блоги";

$ route ['blog / joe'] = "blogs / users / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

$routeМассив содержит шаблоны в качестве ключей и результирующие действия в качестве значений в controller/action_method/dynamic_parameterформате.

* Это не предназначено как описание канонического процесса, просто упрощенное объяснение.

Яннис
источник
15
Должен быть значок для описания маршрутизатора MVC без использования какой-либо производной от «dispatch» ...
Яннис