Сегодня мы опишем очень важный элемент современного сайта - маршрутизацию. По своей сути маршрутизация это сопоставление определенного адреса страницы и содержимого данной страницы. В идеале каждому адресу (URL) должно соответствовать только одно содержимое страницы. На практике часто встречается случай, когда одному и тому же содержимому соответствует несколько URL, это плохо с точки зрения поисковых роботов, в их понимании это дубли страниц, и несколько затрудняет индексирование, т.к. робот должен понять какая страница является главным зеркалом.
Zend Framework 3 очень строго подходит к этому вопросу, в отличие от первой версии, где дубли страниц встречались часто. Как и в первой версии фреймворк предлагает мощную и гибкую систему маршрутизации, она, как правило, описываются программистом в конфигурационном файле. Рассмотрим пример простого модуля, Mf\Statpage, фрагмент конфигурационного файла:
….
'router' => [
'routes' => [
'page_ru_RU' => [
'type' => Segment::class,
'options' => [
'route' => '/page/:page',
'constraints' => [
'page' => '[a-zA-Z0-9_-]+',
],
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
'locale' => 'ru_RU'
],
],
],
],
],
….
Все маршруты нужно указывать в массиве с ключем 'routes'. Обязательно нужно указать тип обработчика, самые распространенные это Segment и Literal. Первый может принимать разные параметры включенные в URL, второй обрабатывает тот URL, который указан как есть. В документации производителя вы сможете найти другие типы обработчика, например, обработка схемы HTTP/HTTPS, имя домена для построения мульти сайтов, регулярные выражения, метод запроса и т.д.
В нашем примере видим, что используется адрес «/page/:page» - последний параметр это параметр, т.е. строка, которая определяет имя контента для извлечения из базы данных. С помощью 'constraints' мы можем указать правила отбора строки, это существенно уменьшит возможности хакерам для проникновения в ваше веб приложение. Важным параметром является ключ 'defaults' - здесь мы указывает значения по умолчанию, имя контроллера и метода в который будет передано управление при совпадении адреса в строке браузера и условиям данного маршрута. Как видим все очень просто. Но это еще не все!
Обратное преобразование маршрутов
Фремворк предлагает нам удобное обратное преобразование наших данных в готовый адрес. Это нужно для генерации адресов ссылок нашего приложения, достаточно в представлении использовать помощник $this->url(«Имя маршрута»,[массив параметров]), например, echo $this->url('page_ru_RU',[ 'page'=>123456]); в результате мы получим строку /page/123456 - т.е. для генерации адресов нам не нужно помнить схему маршрутов и их вид, нужно только знать имя маршрута и параметры в нем. Удобство заключается в том, что если нам вдруг захочется изменить маршрут, например, на /statpage/123456 нам не нужно искать в представлении генерацию, достаточно в конфигурации приложения в секции 'routes' просто поменять '/page/:page' на '/statpage/:page' и все! Если наш сайт крупный портал, который содержит много модулей, нам не нужно искать в этих модулях места, где генерируется эти адреса.
Итак, маршрутизация в Zend Framework 3 это гибко, удобно и не очень сложно. Чем сложнее сайт, тем больше маршрутов нам понадобится. Специалисты нашей студии разработают для вас сайт любой сложности, с применением описанной технологии, звоните.
