Контроллеры: Engine\Controller и actions
Контроллеры D7 наследуются от Bitrix\Main\Engine\Controller и размещаются в lib/Controller модуля, обрабатывая запросы в методах с суффиксом Action. Входящие аргументы действий автоматически связываются по именам и типам через механизм Binder, а возвращаемый результат по умолчанию упаковывается в стандартизированный JSON-ответ (AjaxJson).
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
\Bitrix\Main\Engine\Controller
-
2
Структура контроллера
-
3
Actions (действия)
-
4
Размещение в модуле
-
5
Конфигурация действий
-
6
Возвращаемые значения
Материалы
Официальная документация
-
Создание контроллера Новая дока
Проверь себя
BX.ajax.runAction возвращает ошибку «Could not find value for parameter {userId}», хотя фронтенд точно шлёт данные. Где искать?
В именах. Binder привязывает аргументы действия к параметрам запроса по имени и типу: если метод объявлен как likeAction(int $userId), а JS отправляет user_id, значения нет. Второй вариант — тип: строка вместо int даёт «Invalid value to match with parameter».
Контроллер лежит в lib/Controller модуля, класс есть, но AJAX-вызов my:module.user.like отвечает, что контроллер не найден. Что забыли?
Секцию controllers с defaultNamespace в .settings.php модуля. Без неё Resolver не может собрать имя класса из идентификатора действия. Для HTTP-маршрута эта секция не нужна, там класс указан явно.
Почему документация советует не регистрировать один контроллер и для AJAX, и для HTTP-маршрута?
У точек входа разные ожидания: BX.ajax.runAction ждёт JSON в формате AjaxJson, а маршрут может отдавать HTML через renderView() или файл. Одно действие с двумя способами вызова путает фильтры и отладку; проще два контроллера с общим сервисом.
Действие вернуло массив, а фронтенд получил ошибку и пустое data. Что произошло?
Скорее всего, до массива дошло addError(): если в контроллере есть ошибки, ответ уходит со status error независимо от возвращённого значения. Проверьте фильтры и вызовы addError() в действии и в автоваринге параметров.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить