Почему Битрикс не находит класс из кастомного модуля?

Добрый день, помогите разобраться почему в Битрикс не подключается сторонняя библиотека PHP

У нас Битрикс24 коробочная версия, мне необходимо добавить в проект дополнительную библиотеку PhpSpreadsheet

Я нашел статью где автор показывает как это сделать https://tomgif.ru/1c/bitrix-php-library/
Смысл статьи - надо создать свой модуль и в папке lib разместить классы библиотеки.

На основе статьи я сделал по инструкции свой модуль в котором разместил классы библиотеки PhpSpreadsheet, модуль разместил в директории local/modules/ и затем установил его, модуль установился без ошибок
название модуля - PhpSpreadsheet (phpspreadsheet) он отображается в списке модулей как установленный

Теперь я пытаюсь в PHP консоли вызвать классы библиотеки и создать объект, но Битрикс выдает ошибку,
Class 'PhpOffice\PhpSpreadsheet\Spreadsheet' not found

Возможно я неправильно подключил библиотеку, не могу понять?

Код который я ввожу в консоли:

use Bitrix\Main\Loader;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
Loader::includeModule('phpspreadsheet'); // подключаю мой модуль

$spreadsheet = new Spreadsheet();  // создаю объект
$sheet = $spreadsheet->getActiveSheet();

файл install/index.php

<?
use Bitrix\Main\ModuleManager;

class PhpSpreadsheet extends CModule
{
  public $MODULE_ID = 'phpspreadsheet';
  public $MODULE_VERSION;
  public $MODULE_VERSION_DATE;
  public $MODULE_NAME;
  public $MODULE_DESCRIPTION;

  public function __construct()
  {
    $this->MODULE_ID = 'phpspreadsheet';
    $this->MODULE_VERSION = '0.0.1';
    $this->MODULE_VERSION_DATE = '2018-10-06 18:52:00';
    $this->MODULE_NAME = 'PhpSpreadsheet';
    $this->MODULE_DESCRIPTION = 'PhpSpreadsheet';

  }

  public function doInstall()
  {
    ModuleManager::registerModule($this->MODULE_ID);
  }

  public function doUninstall()
  {
    ModuleManager::unregisterModule($this->MODULE_ID);
  }

}


файл include.php
/ 
use Bitrix\Main\Loader;
use Bitrix\Main\Application;

$application = Application::getInstance();
$modulePath = getLocalPath('modules/phpspreadsheet');
$libPath = $application->getDocumentRoot() . $modulePath . '/lib';

$iterator = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator($libPath)
);

$classes = [];
foreach ($iterator as $file) {
  if ($file->isDir())
    continue;

  $pathName = $file->getPathname();

  $basePath = str_replace($libPath, '', $pathName);
  $name = str_replace('.php', '', $basePath);
  $name = str_replace('/', '\\', $name);
  $path = 'lib' . $basePath;
  $classes[$name] = $path;
}

Loader::registerAutoLoadClasses('phpspreadsheet', $classes);


Библиотека https://github.com/PHPOffice/PhpSpreadsheet/tree/m...
я разместил файлы библиотеки в директории модуля папка модуля/lib/PhpSpreadsheet/
Может быть причина ошибки в структуре библиотеки м я апросто не правильно указываю пространство имен при обращении к классу библиотеки?
  • Вопрос задан
  • 2066 просмотров
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Проверьте что у вас в $classes в файле include.php

Я бы вообще не стал делать так как предложено автором, а воспользовался подключением composer к Bitrix Framework
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы