Skip to main content

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']

Инициализируется HTTP приложение Битрикс
$application = \Bitrix\Main\Application::getInstance();
$application->initializeExtendedKernel([
    'get' => $_GET,
    'post' => $_POST,
    'files' => $_FILES,
    'cookie' => $_COOKIE,
    'server' => $_SERVER,
    'env' => $_ENV
]);