Чому в рамках PHP-фреймів використовується концепція маршруту?


31

Причина, яку я запитую, це тому, що сценарій PHP не є маршрутом? Наприклад, якщо у вас є article.php, ваш маршрут просто http://mysite.com/article.php .

Навіщо далі абстрагувати поняття маршруту, коли воно вже існує як простий файл?

Відповіді:


44

Щоб зрозуміти, що робить роутер, спершу потрібно зрозуміти, що таке перезаписувач. Зі статті Вікіпедії (моє наголос):

Двигун перезапису - це програмне забезпечення, яке змінює зовнішній вигляд веб-URL-адреси (переписування 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, найбільш часто використовуваним механізмом перезапису є Mod_rewrite Apache .

Якщо ви хочете перезаписати URL-адреси, вам потрібна якась маршрутизація, оскільки маршрутизація - це процес отримання URL-адреси, розбиття її на компоненти та вирішення питання про те, який саме сценарій потрібно викликати. Сторінка документації для стандартного маршрутизатора Zend Framework пояснює процес як:

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

Більшість фреймворків PHP сьогодні базуються на шаблоні MVC , і в рамках MVC процес йде приблизно так * :

  1. Веб-переглядач вказує на URL-адресу,
  2. Веб-сервер ловить запит і пересилає його до загальної точки входу, зазвичай це index.phpсценарій,
  3. index.php отримує URL та запускає процес маршрутизації.
  4. URL розкладається на параметри, де перший - контролер, другий - метод дії, а решта вважаються динамічними параметрами,
  5. Якщо існує клас контролера, що відповідає першому параметру, об'єкт контролера створюється миттєво,
  6. Метод дії, який зазвичай є функцією об'єкта контролера, називається, а його повернення - те, що фактично повертається до браузера.

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

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

$ route ['blog / joe'] = "блоги / користувачі / 34";

$ route ['product / (: any)'] = "каталог / product_lookup";

$ route ['product / (: num)'] = "каталог / product_lookup_by_id / $ 1";

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

* Це не задум як опис канонічного процесу, а лише спрощене пояснення.


15
Повинен бути знак для опису маршрутизатора mvc без використання похідних "диспетчеризації" ...
yannis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.