Ядро
Подключение модулей
Рабочая справка по подключению модулей 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;