TGViewer
EvApps EvApps @evapps_team · 199 subscribers
Post #1462 250
👋 Всем привет!

В прошлых постах мы говорили про различные системы и инструменты, которые помогают решать задачи разработчика.

А сегодня поговорим о том, как в Bitrix можно организовать компонент не просто для отображения, а как полноценный контроллер с CRUD-операциями.

Обработчик запросов в классе компонента (файл class.php) позволяет:

✅ Инкапсулировать весь код в одном классе
✅ Повторно использовать методы, данные и параметры компонента
✅ Использовать языковые фразы, шаблоны компонента
✅ Переопределять в компонентах-потомках стандартное поведение

Чтобы класс компонента мог обрабатывать запросы, необходимо:

▶️ Реализовать интерфейс \Bitrix\Main\Engine\Contract\Controllerable

▶️ Определить методы-действия с суффиксом Action

▶️ Реализовать метод configureActions (обычно возвращает пустой массив — конфигурацию по умолчанию)

▶️ Если нужно добавлять, обрабатывать ошибки, то стоит реализовать \Bitrix\Main\Errorable

При выполнении компонента в аяксовом режиме выполняются последовательно:

1️⃣CBitrixComponent::onIncludeComponentLang

2️⃣ CBitrixComponent::onPrepareComponentParams

Запуск действия с фильтрами:
<?php

namespace local\components\vendor\example;

use CBitrixComponent;
use Bitrix\Main\Error;
use Bitrix\Main\Engine\Contract\Controllerable;

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

class ExampleComponent extends CBitrixComponent implements Controllerable
{
public function executeComponent()
{
// этот код не будет выполняться при запуске ajax-действий
}

public function configureActions()
{
return [];
}

public function onPrepareComponentParams($arParams)
{
// подготовка параметров
}

public function createAction(array $fields): ?array
{
$example = Example::add($fields);
if (!$example) {
$this->addError(new Error('Could not create example.', {код_ошибки}));
return null;
}
return $example->toArray();
}

public function viewAction(int $id): ?array
{
$example = Example::getById($id);
if (!$example) {
$this->addError(new Error('Could not find example.', {код_ошибки}));
return null;
}
return $example->toArray();
}

public function listAction(array $fields): ?array
{
$examples = Example::getList($fields);
return array_map(static fn ($example) => $example->toArray(), $examples);
}

public function updateAction(int $id, array $fields): ?array
{
$example = Example::update($id, $fields);
if (!$example) {
$this->addError(new Error('Could not update example.', {код_ошибки}));
return null;
}
return $example->toArray();
}

public function deleteAction(int $id): ?array
{
$example = Example::delete($id);
if (!$example) {
$this->addError(new Error('Could not delete example.', {код_ошибки}));
return null;
}
return $example->toArray();
}
}
  • 🔥 3
  • 👍 1
More from @evapps_team
  1. Sep 23, 2026🔁 Ретраи, которые добивают лежачий сервис Сервис-сосед начал тупить, отвечает через раз Л…
  2. Sep 23, 2026Хотите не теряться среди сотен откликов? На hh сейчас бывает ощущение, что до HR просто не…
  3. Sep 23, 2026photo post
  4. Sep 21, 2026🧩 Что тут не так? Код-загадка Формат новый - показываю код, ты угадываешь подвох, ниже ра…
  5. Sep 18, 2026🎭 Мифы про производительность, в которые верят даже опытные Миф 1: "Меньше строк кода - б…
  6. Sep 16, 2026🚨 Как перевод денег уронил нам прод ⏰ 19:10 Задеплоили долгожданное - переводы между коше…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →