Роутинг D7: Router и маршруты
Современный роутинг D7 конфигурируется через файлы маршрутов в /local/routes/ и точку входа /bitrix/routing_index.php в настройках веб-сервера. Маршруты связывают URL с методами контроллеров с типизированными параметрами, позволяя отдавать JSON, файлы или HTML-представления (renderView()) без создания физических PHP-файлов.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Класс Router
-
2
Определение маршрутов
-
3
Параметры маршрутов
Материалы
Официальная документация
-
Конфигурация ядра: раздел «Роутинг» Новая дока
Материалы BXMax
Проверь себя
Маршрут /api/orders/ работает в Docker-окружении разработчика и отдаёт 404 на проде. Где искать?
В конфигурации веб-сервера: несуществующие пути должны уходить на /bitrix/routing_index.php, а не на urlrewrite.php. Вторая причина — на проде нет секции routing в .settings.php или физический файл по этому пути, который nginx отдаёт раньше маршрута.
Гость открывает публичный маршрут на контроллер и видит JSON со status error вместо страницы. Почему?
У действий контроллера включены префильтры по умолчанию: Authentication, HttpMethod и Csrf. Для публичного GET их нужно снять через -prefilters в configureActions() или атрибутами, оставив HttpMethod.
Чем плох код, который читает параметр маршрута через getCurrentRoute()->getParameterValue() внутри компонента?
Параметры маршрута привязываются к аргументам действия по имени, и там их место. Чтение из текущего маршрута в произвольном месте размазывает знание об адресах по коду; документация прямо не рекомендует этот способ.
Зачем давать маршрутам имена, если ссылки и так можно написать строкой?
Router::route() собирает URL по имени и параметрам, и при смене шаблона адреса в routes/web.php все ссылки меняются сами. Имена в группах склеиваются без разделителя, поэтому точку ставят в конце имени группы.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить