@haa

Как работает include.php файл в модуле битрикса?

Создаю модуль битрикса, через файл include.php пытаюсь подключить классы, используя Loader::registerAutoLoadClasses но эти классы не могу использовать, пишет Class not found.
Если подключить файл include.php вручную через require_once все работает. Что я делаю не правильно или файл include.php не должен автоматом все подключать?
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
@haa Автор вопроса
Loader::includeModule('mymodule'); подключил и все заработал
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
вот выдержка из болванки модуля, которой пользуюсь много лет. Может, сейчас есть вариант поудачнее, но это работает
<?php

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

$requiredModules = array(
    'iblock',
    'catalog',
);
foreach ($requiredModules as $module) {
    if (!Loader::includeModule($module)) {
        die("Требуемый модуль {$module} не найден!");
    }
}

$libDir = realpath(__DIR__ . '/lib');

$Directory = new RecursiveDirectoryIterator($libDir);
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);

$classMap = array();
foreach ($Regex as $k => $v) {
    // приводим к юниксовым путям, для единообразия
    $relPath = str_replace('\\', '/', str_replace(__DIR__, '', $k));
    // тут ещё и убираем расширение
    $nsPath = substr(str_replace('\\', '/', str_replace($libDir, '', $k)), 0, -4);
    $nsPath = 'MyNamespace' . str_replace('/', '\\', $nsPath);
    $classMap[$nsPath] = $relPath;
}

Loader::registerAutoLoadClasses('my.module', $classMap);
Loc::loadMessages(__FILE__);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы