PHPackages                             proklung/bitrixsymfonyrouterbundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. proklung/bitrixsymfonyrouterbundle

ActiveSymfony-bundle[Framework](/categories/framework)

proklung/bitrixsymfonyrouterbundle
==================================

Symfony Router for custom implementation Bitrix-Symfony

1.4.5(4y ago)2681MITPHPPHP &gt;=7.3 || ^8.0

Since Apr 21Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ProklUng/BitrixSymfonyRouterBundle)[ Packagist](https://packagist.org/packages/proklung/bitrixsymfonyrouterbundle)[ Docs](https://github.com/ProklUng/BitrixSymfonyRouterBundle)[ RSS](/packages/proklung-bitrixsymfonyrouterbundle/feed)WikiDiscussions master Synced yesterday

READMEChangelog (10)Dependencies (11)Versions (42)Used By (1)

Бандл для подключения Symfony Router к кастомным вариантам Bitrix-Symfony
=========================================================================

[](#бандл-для-подключения-symfony-router-к-кастомным-вариантам-bitrix-symfony)

Зачем?
------

[](#зачем)

**INTERNAL**. Нужен для максимального разнесения функционала по пакетам. Плюс борьба с копипастой инструментов на проектах.

Установка
---------

[](#установка)

1. `composer require proklung/bitrixsymfonyrouterbundle`
2. Подключение бандла в `standalone_bundles.php`

Параметры
---------

[](#параметры)

Файл `symfony_router.yaml` в конфигурации бандлов:

- `enabled` - Использовать бандл. По умолчанию `true`.
- `controller_annotations_path` - массив с путями к контроллерам, использующим аннотации.
- `router_cache_path` - путь к кэшу аннотаций (вида `%kernel.cache.dir%/routes`). По умолчанию `null`. Если задан, то роуты будут кэшироваться.
- `router_config_file` - путь к файлу с конфигурацией роутов. По умолчанию `local/configs/routes.yaml`. Файл может быть в любом поддерживаемом Symfony формате - Yaml, PHP, XML и т.д.
- `router_check_exists_controller` - проверять на существование классы-контроллеры. По умолчанию `false`.

Конфигурирование нативных роутов Битрикса через Yaml файл
---------------------------------------------------------

[](#конфигурирование-нативных-роутов-битрикса-через-yaml-файл)

С версии `21.400.0` (от 16.07.2021) главного модуля в Битриксе появился [сносный](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=013764&LESSON_PATH=3913.3516.5062.13764) роутер.

#### Зачем?

[](#зачем-1)

Чтобы использовать привычный способ конфигурирования роутов через Yaml.

#### Использование

[](#использование)

Файл описания маршрутов (например, `/local/routes/web.php`):

```
use Prokl\ServiceProvider\ServiceProvider;
use Bitrix\Main\Routing\Controllers\PublicPageController;
use Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\BaseRoutesConfigurator;
use Prokl\BitrixSymfonyRouterBundle\Services\Utils\BitrixRouteConvertor;
use Bitrix\Main\Routing\RoutingConfigurator;

// Не обязательно. Смотри ниже.
$container = ServiceProvider::instance();

$agnosticRouter = new BaseRoutesConfigurator(
    $_SERVER['DOCUMENT_ROOT'] . '/local/configs/bitrix_routes.yaml', // Конфиг роутов
    $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/routes', // Кэш; если null - без кэширования.
    $_ENV['DEBUG']
);
$routeCollection = $agnosticRouter->getRoutes();

$routeConvertor = new BitrixRouteConvertor($routeCollection);
// Не обязательно. Без контейнера контроллеры будут инстанцироваться через new,
// а не через контейнер. Но тогда уже без разрешения зависимостей.
$routeConvertor->setContainer($container);

return function (RoutingConfigurator $routes) use ($container, $routeConvertor, $routeCollection) {

    $routeConvertor->convertRoutes($routes);
};
```

В случае, если контейнер подключается, то возможна краткая форма:

```
use Prokl\ServiceProvider\ServiceProvider;
use Bitrix\Main\Routing\Controllers\PublicPageController;
use Prokl\BitrixSymfonyRouterBundle\Services\Utils\BitrixRouteConvertor;
use Bitrix\Main\Routing\RoutingConfigurator;

// Не обязательно. Смотри ниже.
$container = ServiceProvider::instance();

$routeCollection = $container->get('bitrix_native_routes.routes.collection');

$routeConvertor = new BitrixRouteConvertor($routeCollection);
// Не обязательно. Без контейнера контроллеры будут инстанцироваться через new,
// а не через контейнер. Но тогда уже без разрешения зависимостей.
$routeConvertor->setContainer($container);

return function (RoutingConfigurator $routes) use ($container, $routeConvertor, $routeCollection) {

    $routeConvertor->convertRoutes($routes);

    $routes->get('/', new PublicPageController('/index.php'));

};
```

Пример файла с конфигурацией роутов (обычный yaml файл с роутами для Symfony):

```
first_bitrix_route:
  path: /foo/{param}/
  controller: 'Prokl\BitrixSymfonyRouterBundle\Tests\Fixture::cacheAction'
  methods: GET|POST
  requirements:
    param: '\d+'
  defaults:
    param: 'Russia'

# Старые статические страницы
# / => /index.php
public_page:
  path: /
  controller: ''
  defaults:
    _public: true # Ключевой признак
```

Если установлен Битрикс с версией модуля младше `21.400.0`, то соответствующие сервисы будут удалены из бандла на стадии компиляции.

Использование роутера без контейнера и вне фреймворка
-----------------------------------------------------

[](#использование-роутера-без-контейнера-и-вне-фреймворка)

`init.php`:

```
use Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\BaseRoutesConfigurator;
use Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\Router;
use Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\BitrixInitializerRouter;

$agnosticRouter = new BaseRoutesConfigurator(
    $_SERVER['DOCUMENT_ROOT'] . '/local/configs/standalone_routes.yaml',
    $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/routes_agnostic', // Кэш; если null - без кэширования.
    $_ENV['DEBUG'] // Режим отладки или нет
);

$agnosticRouterInstance = new Router(
    $agnosticRouter->getRouter(),
    new BitrixInitializerRouter()
);
```

Все. Подтянутся роуты из `/local/configs/standalone_routes.yaml`. Автоматически подцепятся события.

Допускается наличие нескольких таких "агностических" роутеров в один момент.

Прочее
------

[](#прочее)

1. Экземпляр `Symfony\Component\Routing\Router` (роуты Symfony) можно получить снаружи так:

```
$router = \Prokl\BitrixSymfonyRouterBundle\Services\Agnostic\SymfonyRoutes::getInstance();
```

2. Как загрузить роуты бандлы:

В файле `Extension` бандла:

```
    public function load(array $configs, ContainerBuilder $container) : void
    {
        // ....
         $this->loadRoutes(__DIR__ . '/../Resources/config', 'routes.yaml');
    }

    /**
     * Загрузить роуты в бандле.
     *
     * @param string $path   Путь к конфигу.
     * @param string $config Конфигурационный файл.
     *
     * @return void
     *
     * @throws InvalidArgumentException Нет класса-конфигуратора роутов.
     */
    private function loadRoutes(string $path, string $config = 'routes.yaml') : void
    {
        $routeLoader = new \Symfony\Component\Routing\Loader\YamlFileLoader(
            new FileLocator($path)
        );

        $routes = $routeLoader->load($config);

        if (class_exists(InitRouter::class)) {
            InitRouter::addRoutesBundle($routes);
            return;
        }

        throw new InvalidArgumentException('Class InitRouter not exist.');
    }
```

Или воспользоваться трэйтом `Prokl\BitrixSymfonyRouterBundle\Services\Utils\LoaderBundleRoutesTrait`, куда вынесен этот метод.

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

41

Last Release

1726d ago

PHP version history (2 changes)1.0.0PHP &gt;=7.3

1.3.8PHP &gt;=7.3 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/9210c86ee6734e537eaf22c0f2fe7a965451e340e39e1aae2b74013f24c2660d?d=identicon)[gedovan](/maintainers/gedovan)

---

Top Contributors

[![ProklUng](https://avatars.githubusercontent.com/u/19857467?v=4)](https://github.com/ProklUng "ProklUng (47 commits)")

---

Tags

bitrixbitrix-symfonyphp7symfony-bundle

### Embed Badge

![Health badge](/badges/proklung-bitrixsymfonyrouterbundle/health.svg)

```
[![Health](https://phpackages.com/badges/proklung-bitrixsymfonyrouterbundle/health.svg)](https://phpackages.com/packages/proklung-bitrixsymfonyrouterbundle)
```

###  Alternatives

[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M650](/packages/sylius-sylius)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[symfony/framework-bundle

Provides a tight integration between Symfony components and the Symfony full-stack framework

3.6k235.4M9.7k](/packages/symfony-framework-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
