BIK.REST Help

Контроллер

В данном руководстве будет описано, как создать собственный контроллер и соответствующий роутер. Это позволит вам расширить функциональность вашего проекта и интегрировать бизнес-логику в REST API.

Структура директорий

Все контроллеры и роутеры для вашего проекта нужно создавать в следующих директориях:

  • Контроллеры: /local/bik.rest/controllers/

  • Роутеры: /local/bik.rest/routers/

Создание контроллера

  1. Создать директорию /local/bik.rest/controllers/.

  2. Создать новый PHP-файл с именем, отражающим назначение вашего контроллера (например, CustomController.php).

  3. Откройте созданный файл и определите класс контроллера, который должен наследовать от AbstractController.

  4. Создайте свой первый контроллер, основываясь на приведенном ниже примере.

Пример контроллера

<?php namespace BIK\Rest\Controllers; use BIK\Rest\ORM\Resource\BasketResource; use BIK\Rest\ORM\Resource\OrderResource; use Bitrix\Main\Loader; use Bitrix\Sale\Order; use Bitrix\Main\ORM\Query\Query; use Bitrix\Sale\Internals\OrderTable; use Bitrix\Sale\Internals\BasketTable; use Bitrix\Sale\Internals\OrderPropsValueTable; use Bitrix\Sale\Delivery\Services\Manager; use Bitrix\Iblock\ElementTable; class CustomController extends AbstractController { /* * Описание эндпоинтов для Swagger * * Данный метод может быть переопределён из класса AbstractController при необходимости */ protected static function methodDocMap (): array { return [ 'post_cancel_order' => [ 'summary' => 'Отмена заказа', 'description' => 'Отмена заказа по ID для текущего пользователя', ], 'get_order' => [ 'summary' => 'Получение заказа', 'description' => 'Получение заказа по ID для текущего пользователя' ], ]; } /* * Описание параметров конкретного эндпоинта для Swagger * * Данный метод может быть переопределён из класса AbstractController при необходимости */ protected static function parametersDocMap () { $return = parent::parametersDocMap(); $return['post_cancel_order'] = [ 'orderID' => [ "name" => "orderID", "in" => "requestBody", "type" => "int", "required" => true, "schema" => [ "type" => "object", ], "default" => [] ] ]; return $return; } /* * Пример эндпоинта для POST запроса * В этом случае запрос должен осуществляться по адресу {домен}/api/custom/cancel/order * * $this->responseData используется, чтобы указать ответ от эндпоинта, необязательный * $this->responseCode используется, чтобы указать HTTP код ответа, по умолчанию - 200, необязательный */ public function post_cancel_order($orderID) { Loader::includeModule("sale"); global $USER; $order = Order::load($orderID); if ($order->getUserId() == $USER->getId()) { $oldOrderObject = new \CSaleOrder(); $oldOrderObject->CancelOrder($order->getId(), "Y", 'Отменено пользователем'); $order->setField("STATUS_ID","C"); $result = $order->save(); if($result->isSuccess()) { $this->responseData['success'] = 'Заказ успешно отменен'; } else { $this->responseData['error'] = 'При отмене произошла ошибка'; $this->responseCode = 400; } } else { $this->responseData['error'] = 'Это заказ не текущего пользователя'; $this->responseCode = 400; } } /* * Пример эндпоинта для DELETE запроса * В этом случае запрос должен осуществляться по адресу {домен}/api/custom/example */ public function delete_example() { $this->responseData['data'] = 'DELETE request'; } /* * Пример эндпоинта для PUT запроса * В этом случае запрос должен осуществляться по адресу {домен}/api/custom/example */ public function put_example() { $this->responseData['data'] = 'PUT request'; } /* * Пример эндпоинта для GET запроса * В этом случае запрос должен осуществляться по адресу {домен}/api/custom/order */ public function get_order($orderID) { Loader::includeModule("sale"); global $USER; if ($USER->IsAuthorized()) { $order = Order::load($orderID); if ($order) $this->responseData['data'] = [ 'id' => $order->getId(), 'price' => $order->getPrice(), 'paid_sum' => $order->getSumPaid(), 'is_paid' => $order->isPaid() ]; else $this->responseData['error'] = 'Заказ не найден'; } } }

Роутер

Каждый контроллер должен иметь свой роутер. Это необходимо для корректной маршрутизации HTTP-запросов на ваши контроллеры.

Создание роутера

  1. Перейдите в папку /local/bik.rest/routers/.

  2. Создайте новый PHP-файл для роутера (например, CustomRouter.php).

  3. Определите класс роутера, который должен наследовать от AbstractRouter.

  4. Создайте роутер, основываясь на приведенном ниже примере.

Пример роутера

<?php namespace BIK\Rest\Routers; class CustomRouter extends AbstractRouter { public static $name = 'Custom'; # Название роутера в Swagger public static $description = 'Описание'; # Описание роутера в Swagger public function run() { } }
Last modified: 19 июня 2025