BitrixFramework

Создание роута для внешних запросов

1. Создаем модуль
local/modules/dg.catalog/install/index.php

<?php

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\ModuleManager;

class dg_catalog extends CModule
{
public $MODULE_ID = 'dg.catalog';
public $MODULE_VERSION;
public $MODULE_VERSION_DATE;
public $MODULE_NAME;
public $MODULE_DESCRIPTION;

public function __construct()
{
include __DIR__ . '/version.php';

if (isset($arModuleVersion['VERSION'], $arModuleVersion['VERSION_DATE']))
{
$this->MODULE_VERSION = $arModuleVersion['VERSION'];
$this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE'];
}

$this->MODULE_NAME = Loc::getMessage('DG_CATALOG_MODULE_NAME');
$this->MODULE_DESCRIPTION = Loc::getMessage('DG_CATALOG_MODULE_DESCRIPTION');
}
public function DoInstall()
{
global $USER;
if (!$USER->IsAdmin())
{
return;
}
ModuleManager::registerModule($this->MODULE_ID);

// $this->InstallDB();
// $this->InstallFiles();
}

public function DoUninstall()
{
global $USER;
if (!$USER->IsAdmin())
{
return;
}
// $this->UnInstallFiles();
// $this->UnInstallDB();
ModuleManager::unRegisterModule($this->MODULE_ID);
}

public function InstallDB()
{
// метод приведен для примера
// зарегистрировать зависимости на события модулей
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->registerEventHandler('...');
// добавить агенты
\CAgent::AddAgent(...);
// добавить пользовательские поля
$userType = new \CUserTypeEntity();
$userType->Add(...);
}

public function UnInstallDB()
{
// метод приведен для примера
// удалить все зависимости на событиях
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->unRegisterEventHandler('...');
// агенты можно не удалять, они будут удалены автоматически
// удалить пользовательские поля
$userType = new \CUserTypeEntity();
$userType->Delete(...);
}

public function InstallFiles()
{
CopyDirFiles($_SERVER['DOCUMENT_ROOT'] . '/local/modules/my.module/install/components', $_SERVER['DOCUMENT_ROOT'] . '/local/components', true, true);
}

public function UnInstallFiles()
{
DeleteDirFilesEx('/local/components/my');
return true;
}
}
?>


local/modules/dg.catalog/install/version.php

<?php
$arModuleVersion = [
'VERSION' => '1.0.0',
'VERSION_DATE' => '2025-03-04 16:10:25'
];
?>


local/modules/dg.catalog/.settings.php

<?php
return [
'controllers' => [
'value' => [
'defaultNamespace' => '\\Dg\\Catalog\\Controller',
],
'readonly' => true,
]
];
?>


local/modules/dg.catalog/lib/controller/catalog.php

<?php

namespace Dg\Catalog\Controller;

final class catalog extends \Bitrix\Main\Engine\Controller
{
public function testAction()
{
return "fffffffffffff";
}
protected function getDefaultPreFilters()
{
//Это для того, что бы отключить необходимость в csrf и других действий безопасности
return [];
}
}


2 в local/routes/dg_catalog_api.php

<?php

use Bitrix\Main\Routing\RoutingConfigurator;
use Dg\Catalog\Controller\catalog;

return static function (RoutingConfigurator $routes) {

$routes->any('/dg_catalog/test', static fn() => 'test'); // использует замыкание

$routes->any('/dg_catalog/controller_test', [catalog::class, 'test']);

};


3. Устанавливаем модуль на странице  Marketplace > Установленные решения



Теперь по адресу /dg_catalog/controller_test