@demnagel

Как использовать свой контроллер в RoutingConfigurator?

Всем привет, не пойму почему не работает мой контроллер через роут. (Все вроде по мануалу и вебинар их смотрел на эту тему) Что-то упустил - что не пойму.
В модуле есть контроллер - путь /local/modules/api/lib/controller/Test.php

namespace Api\Controller;

use Bitrix\Main\Engine\Controller;

class Test extends Controller
{
    public function countAction()
    {
        return ['d' => 55];
    }
}


Если вызвать его через js - BX.ajax.runAction('api.test.count'). Все ок!
Если пытаюсь вызвать его в роуте $routes->get('/test', [\Api\Controller\Test::class, 'count']); , то получаю ошибку
There is no `Api\Controller\Test` class, module `api.controller` is unavailable (0)


.settings.php в модуле выглядит так
return [
    'controllers' => [
        'value' => [
            'defaultNamespace' => '\\Api\\Controller',
        ],
        'readonly' => true,
    ]
];


Подключаю классы модуля в include.php
Bitrix\Main\Loader::registerAutoloadClasses(
    'api',
    array(
        'Api\\Controller\\Test' => 'lib/controller/Test.php',
    )
);


Еще такой вопрос как сделать роут на главную??? Вариант $routes->get('/', function(){echo 'hello'}); не работает)
  • Вопрос задан
  • 580 просмотров
Решения вопроса 1
@demnagel Автор вопроса
Разобрался сам - модуль нужно обязательно называть из двух частей (например my.api а не api) соответственно и пространство нужно My\Api\Controller. Нужно это для того, что bitrix разбивает пространство имен и из двух первых слов составляет название модуля через точку, а потом подключает (получается как раз my.api). Исключением является если первое слово в пространстве bitrix
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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