Middle Роутинг и контроллеры Обязательно

Контроллеры: 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: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти