← Назад к справке

Ядро

Подключение модулей

Рабочая справка по подключению модулей Bitrix Framework: Loader::includeModule, проверка результата, autoload, registerAutoLoadClasses и getLocal.

Перед использованием API модуля его нужно подключить. Для нового кода лучше использовать Bitrix\Main\Loader, а не старый CModule::IncludeModule().

Основы

Подключение модулей — первый шаг почти в любом PHP-коде коробочного Bitrix24.

Loader::includeModule

Метод Loader::includeModule() подключает модуль по его имени и возвращает true, если подключение прошло успешно.

<?php

use Bitrix\Main\Loader;

Loader::includeModule('crm');

В рабочем коде результат лучше проверять, особенно если скрипт может запускаться на разных порталах или в разных редакциях.

Проверка подключения

<?php

use Bitrix\Main\Loader;

const REQUIRED_MODULES = [
    'crm',
    'bizproc',
    'im',
];

/**
 * Подключает модуль или выбрасывает исключение.
 */
function requireModule(string $module_id): void
{
    if (!Loader::includeModule($module_id)) {
        throw new \RuntimeException('Не удалось подключить модуль: ' . $module_id);
    }
}

/**
 * Подключает список обязательных модулей.
 */
function requireModules(array $module_ids): void
{
    foreach ($module_ids as $module_id) {
        requireModule($module_id);
    }
}

try {
    requireModules(REQUIRED_MODULES);

    echo 'Модули подключены';
} catch (\Throwable $exception) {
    echo $exception->getMessage();
}

Старый и новый стиль

Вариант Пример Как использовать
D7 Loader::includeModule('crm') Предпочтительный вариант для нового кода.
Старое ядро CModule::IncludeModule('crm') Может встречаться в старых проектах и примерах.

Если пишешь новую справочную статью или новый локальный скрипт, лучше использовать D7-вариант через Loader.

Autoload

Классы модуля можно регистрировать для автозагрузки.

registerAutoLoadClasses

Для небольшого локального модуля удобно явно зарегистрировать классы и пути к ним.

<?php

use Bitrix\Main\Loader;

const MODULE_ID = 'itsolution.example';

Loader::registerAutoLoadClasses(
    MODULE_ID,
    [
        \Itsolution\Example\Service\ExampleService::class => 'lib/Service/ExampleService.php',
        \Itsolution\Example\Model\ExampleTable::class => 'lib/Model/ExampleTable.php',
    ]
);

registerNamespace

Если нужно зарегистрировать пространство имён целиком, можно использовать registerNamespace().

<?php

use Bitrix\Main\Loader;

/**
 * Регистрирует namespace локальной библиотеки.
 */
function registerLocalNamespace(): void
{
    Loader::registerNamespace(
        'Itsolution\\Example',
        $_SERVER['DOCUMENT_ROOT'] . '/local/modules/itsolution.example/lib'
    );
}

registerLocalNamespace();

getLocal

Loader::getLocal() помогает найти файл сначала в /local, а потом в /bitrix. Это удобно, когда файл может быть переопределён локально.

<?php

use Bitrix\Main\Loader;

/**
 * Получает путь к локальному или стандартному файлу.
 */
function fetchLocalFilePath(string $relative_path): string
{
    $file_path = Loader::getLocal($relative_path);

    return is_string($file_path) ? $file_path : '';
}

$file_path = fetchLocalFilePath('php_interface/include/custom.php');

echo $file_path;

Источники