Программирование сайта - лабиринт маршрутизации

Сегодня мы опишем очень важный элемент современного сайта - маршрутизацию. По своей сути маршрутизация это сопоставление определенного адреса страницы и содержимого данной страницы. В идеале каждому адресу (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 это гибко, удобно и не очень сложно. Чем сложнее сайт, тем больше маршрутов нам понадобится. Специалисты нашей студии разработают для вас сайт любой сложности, с применением описанной технологии, звоните.

Веб-студия "Мастер Флеш"
+7 (928) 416 53 03
ул. Зиповская 5/2 350010 Россия, г.Краснодар

Перейти к списку