Дата последнего изменения: 17.02.2021
Если запрограммированы контроллеры внутри модуля, то их легко сделать доступными для модуля REST
. Это удобно, так как мы повторно используем уже написанный код.
Для этого нужно лишь поправить конфиг модуля .settings.php
.
REST 18.5.1
).<?php return [ 'controllers' => [ 'value' => [ 'defaultNamespace' => '\\Bitrix\\Disk\\Controller', 'restIntegration' => [ 'enabled' => true, ], ], 'readonly' => true, ] ];
\CRestServer?
Если вдруг ajax-действие должно использовать \CRestServer
для какой-то специфической задачи, то это можно легко решить, объявив одним из параметров \CRestServer
.
Пример:
public function getStorageForAppAction($clientName, \CRestServer $restServer) { $clientId = $restServer->getClientId(); ... }
Будьте внимательны, в примере выше действие не будет работать через обычный ajax, так как \CRestServer $restServer там отсутствует и не может быть внедрен. Оно будет доступно только для модуля REST
. Если же объявить его необязательным, то всё будет работать.
public function getStorageForAppAction($clientName, \CRestServer $restServer = null) { if ($restServer) { $clientId = $restServer->getClientId(); } ... }
Может возникнуть задача, что нужно отличить в каком контексте сейчас выполняется действие: это REST или это AJAX? Для этого можно спросить у контролера:
\Bitrix\Main\Engine\Controller::getScope() //возможные варианты \Bitrix\Main\Engine\Controller::SCOPE_REST \Bitrix\Main\Engine\Controller::SCOPE_AJAX \Bitrix\Main\Engine\Controller::SCOPE_CLI