beta / bx.router
Routing for Bitrix app
Installs: 1 389
Dependents: 0
Suggesters: 0
Security: 0
Stars: 9
Watchers: 3
Forks: 6
Open Issues: 1
Type:bitrix-module
Requires
- php: >=7.2
- ext-json: *
- beta/bitrix-psr17: *
- beta/bitrix-psr7: *
- beta/bx.jwt: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
This package is auto-updated.
Last update: 2025-04-04 22:13:28 UTC
README
Установка
composer require beta/bx.router
Пример инициализации приложения:
use BX\Router\RestApplication; use BX\Router\Middlewares\Logger; use BX\Router\Middlewares\UseBitrixCookies; use BX\Router\Middlewares\HttpException; $app = new RestApplication(); $router = $app->getRouter(); $defaultMiddleware = new UseBitrixCookies(); // подставляет куки из bitrix в запрос $defaultMiddleware->addMiddleware(new HttpException($app->getFactory())); // добавляем обработчик ошибок $app->registerMiddleware($defaultMiddleware); // регистрируем цепочку middleware $app->setResponseHandler(new CustomResponseHandler); // Устанавливаем собственный обработчик ответа $app->setService('jwt', new UserTokenService()); // Регистрируем внешний сервис для доступа из контроллера $logger = new Logger(); $router->get('/api/v1/catalog/', new CatalogController)->registerMiddleware($logger); $router->get('/api/v1/some/{test}/', new SomeController)->registerMiddleware($logger); $router->get('/api/v1/pages/main/', new MainPageConroller) ->useCache(3600, 'main_page') // Кешируем ответ, ключ не обязателен, работает только c GET методами ->registerMiddleware($logger); $router->default(new DefaultController) // Контроллер по-умолчанию ->registerMiddleware($logger); $app->run();
Пример контроллера c вызовом компонента:
use BX\Router\Interfaces\BitrixServiceInterface; use BX\Router\Interfaces\AppFactoryInterface; use BX\Router\Interfaces\ContainerGetterInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; use BX\Router\BaseController; class CatalogController extends BaseController { /** * @var BitrixServiceInterface */ protected $bitrixService; /** * @var AppFactoryInterface */ protected $appFactory; /** * @var ContainerGetterInterface */ protected $containerGetter; public function handle(ServerRequestInterface $request): ResponseInterface { $component = $this->appFactory->createComponentWrapper('api:catlog.list'); // Создаем обертку компонента $component->setContainer($this->containerGetter); $component->setAppFactory($this->appFactory); $component->setBitrixService($this->bitrixService); return $component->handle($request); // Возвращаем ответ с данными из массива $arResult } }
Пример простого контроллера:
use BX\Router\Interfaces\BitrixServiceInterface; use BX\Router\Interfaces\AppFactoryInterface; use BX\Router\Interfaces\ContainerGetterInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; use BX\Router\BaseController; class MainPageConroller extends BaseController { /** * @var BitrixServiceInterface */ protected $bitrixService; /** * @var AppFactoryInterface */ protected $appFactory; /** * @var ContainerGetterInterface */ protected $containerGetter; public function handle(ServerRequestInterface $request): ResponseInterface { $this->containerGetter->has('jwt'); // проверяем внешний сервис $jwt = $this->containerGetter->get('jwt'); if (!($jwt instanceof UserTokenService)) { throw new \Exception('Что-то пошло не так...'); } $request->getAttribute('test'); // атрибут из адресной строки $request->getAttributes(); // список атрибутов из адресной строки $jwtToken = trim(str_replace('Bearer', $request->getHeader('Authorization'))); $userContext = $jwt->getUserContext($jwtToken); $user = $userContext->getUser(); $data = $user->toArray(); $response = $this->appFactory->createResponse(); $response->getBody()->write(json_encode($data)); return $response; } }
Пример контроллера с выборкой атрибутов из адресной строки:
use BX\Router\Interfaces\BitrixServiceInterface; use BX\Router\Interfaces\AppFactoryInterface; use BX\Router\Interfaces\ContainerGetterInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; use BX\Router\BaseController; class SomeController extends BaseController { /** * @var BitrixServiceInterface */ protected $bitrixService; /** * @var AppFactoryInterface */ protected $appFactory; /** * @var ContainerGetterInterface */ protected $containerGetter; public function handle(ServerRequestInterface $request): ResponseInterface { $testAttribute = $request->getAttribute('test'); // атрибут из адресной строки $attributes = $request->getAttributes(); // список атрибутов из адресной строки $response = $this->appFactory->createResponse(); $response->getBody()->write(json_encode($attributes)); return $response; } }