Routing
Подробное описание модернизации функционала маршрутизации Битрикс. Переход от нативного способа, к работе через функционал атрибутов php.
Атрибуты PHP: https://www.php.net/manual/ru/language.attributes.overview.php
Роутинг в Битрикс: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=013764&LESSON_PATH=3913.3516.5062.13764
Контроллеры в Битрикс: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=03750&LESSON_PATH=3913.3516.5062.3750
Функционал роутинга доступен в модуле main
начиная с версии 21.400.0.
Для пользовательских модулей использование собственных роутов в папке модуля на данный момент не предусмотрено.
SetUp
Описание настройки конфигурации работы с функционалом роутинга Битрикс.
Копируем файл .settings.php
в директорию /local
и добавляем в возвращаемый массив следующую структуру:
'routing' => [
'value' => [
'config' => [
'web.php',
'api.php'
]
]
],
С версии 24.100.0
главного модуля файлы настроек .settings.php
и .settings_extra.php
могут быть размещены в папке /local
, а файл dbconn.php
— в папке /local/php_interface
.
Создаем файлы web.php
и api.php
в директории /local/routes
со следующим содержанием:
<?php declare(strict_types=1);
use Bitrix\Main\Routing\RoutingConfigurator;
return function (RoutingConfigurator $routes) {
};
Файлы с конфигурацией маршрутов по умолчанию располагаются в папках /bitrix/routes/
и /local/routes/
.
Life Cycle
Жизненный цикл скрипта обработчика маршрутов.
Инициализируется ядро системы
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/start.php';
\Bitrix\Main\Application::getDocumentRoot()
-- Класса приложение не существует до момента инициализации ядра, по этой причине нет возможности использовать нативные методы ядра Битрикс. Получение значении деирективы корня сервера исполняемый директории выполняется через нативный php $_SERVER['DOCUMENT_ROOT']
$application = \Bitrix\Main\Application::getInstance();
$application->initializeExtendedKernel([
'get' => $_GET,
'post' => $_POST,
'files' => $_FILES,
'cookie' => $_COOKIE,
'server' => $_SERVER,
'env' => $_ENV
]);