UNN4MED
@UNN4MED
Битрикс разработчик

Почему не видно классы Битрикса для swagger php? Как подключить?

Мне нужно сгенерировать документацию Api через swagger php в Битриксе, а она не проходит без прямого require до файла start.php, присылает "Class Bitrix\Main\Engine\Controller not found".
Есть другой способ подключения классов Битрикса, например в композер?
<?php
namespace Http\Controllers;
//----без него ошибка
require_once("/var/www/bitrix/bitrix/modules/main/start.php");

use Bitrix\Main\Engine\Controller;

abstract class BaseController extends Controller
{
    public function getDefaultPreFilters(): array
    {
        return [];
    }
}

Версия 1с битрикс 24.0...
Сервер на докере.
Роутинг подключён.
Модуль установлен в админке yngc0der.oauth2server.
В init.php стоит require до композера. Он в local/
init.php

<?
$vendor = $_SERVER['DOCUMENT_ROOT'].'/local/vendor/autoload.php';
if(file_exists($vendor)){
  require_once $vendor;
}

use Bitrix\Main;
Main\EventManager::getInstance()->addEventHandler(
    'yngc0der.oauth2server',
    'OnScopesLoad',
    static function (Main\Event $event): Main\EventResult {
        return new Main\EventResult(Main\EventResult::SUCCESS, [
            'read' => 'Read site data',
            'write' => 'Write site data',
        ]);
    }
);


composer.json

{
    "require": {
        "league/oauth2-server": "^9.0",
        "guzzlehttp/psr7": "^2.6",
        "zircote/swagger-php": "^4"
    },
    "extra": {
        "bitrix-dir": "../bitrix"
    },
    "autoload": {
        "psr-4": {
            "": "lib/",
            "OpenApi\\": "vendor/autoload.php"
        }
    }
}


.settings.php

'yngc0der.oauth2server' => [
    'value' => [
      'private_key' => '/var/www/bitrix/local/private.key', // здесь абсолютный путь
      'public_key' => '/var/www/bitrix/local/public.key', // здесь абсолютный путь
      'private_key_passphrase' => null,
      'encryption_key' => 'BUIxH//ygQrJDGupFM9zuNYHJC6zQsi20PtuO3eNLR4=', // ключ шифрования
    ]
  ],
  'routing' => [
    'value' => [
      'config' => [
        'api.php'
      ]
    ]
  ],

  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 1
@koder_1
Битрикс программист
Вот такая есть конструкция Битрикс для автолоада классов

CModule::AddAutoloadClasses(
'', // не указываем имя модуля
array(
// ключ - имя класса с пространством имен, значение - путь относительно корня сайта к файлу
'start\Start_helper' => '/local/php_interface/include/helper/start_helper.php',
)
);

start - строчка из namespace
Start_helper - название класса
значение элемента массива - путь к файлу с классом.
Ответ написан
Ваш ответ на вопрос

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

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