{"id":18513700,"url":"https://github.com/proklung/bitrixsymfonyrouterbundle","last_synced_at":"2026-01-07T01:53:37.955Z","repository":{"id":57045104,"uuid":"360069417","full_name":"ProklUng/BitrixSymfonyRouterBundle","owner":"ProklUng","description":"Бандл для подключения Symfony Router к кастомным вариантам Bitrix-Symfony.","archived":false,"fork":false,"pushed_at":"2021-08-18T14:52:43.000Z","size":129,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-23T07:34:07.554Z","etag":null,"topics":["bitrix","bitrix-symfony","php7","symfony-bundle"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProklUng.png","metadata":{"files":{"readme":"readme.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-21T07:19:57.000Z","updated_at":"2022-02-12T12:42:21.000Z","dependencies_parsed_at":"2022-08-24T03:40:08.781Z","dependency_job_id":null,"html_url":"https://github.com/ProklUng/BitrixSymfonyRouterBundle","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProklUng%2FBitrixSymfonyRouterBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProklUng%2FBitrixSymfonyRouterBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProklUng%2FBitrixSymfonyRouterBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProklUng%2FBitrixSymfonyRouterBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProklUng","download_url":"https://codeload.github.com/ProklUng/BitrixSymfonyRouterBundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246042012,"owners_count":20714147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitrix","bitrix-symfony","php7","symfony-bundle"],"created_at":"2024-11-06T15:40:16.733Z","updated_at":"2026-01-07T01:53:37.903Z","avatar_url":"https://github.com/ProklUng.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Бандл для подключения Symfony Router к кастомным вариантам Bitrix-Symfony\n\n## Зачем?\n\n**INTERNAL**. Нужен для максимального разнесения функционала по пакетам. Плюс борьба с копипастой инструментов \nна проектах.\n\n## Установка\n\n1) `composer require proklung/bitrixsymfonyrouterbundle`\n\n2) Подключение бандла в `standalone_bundles.php`\n\n## Параметры\n\nФайл `symfony_router.yaml` в конфигурации бандлов:\n\n- `enabled` - Использовать бандл. По умолчанию `true`.\n- `controller_annotations_path` - массив с путями к контроллерам, использующим аннотации. \n- `router_cache_path` - путь к кэшу аннотаций (вида `%kernel.cache.dir%/routes`). По умолчанию `null`. \n   Если задан, то роуты будут кэшироваться. \n- `router_config_file` - путь к файлу с конфигурацией роутов. По умолчанию  `local/configs/routes.yaml`. Файл может быть в любом поддерживаемом Symfony формате - Yaml, PHP, XML и т.д.\n- `router_check_exists_controller` - проверять на существование классы-контроллеры. По умолчанию `false`.\n\n## Конфигурирование нативных роутов Битрикса через Yaml файл\n\nС версии `21.400.0` (от 16.07.2021) главного модуля в Битриксе появился [сносный](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026CHAPTER_ID=013764\u0026LESSON_PATH=3913.3516.5062.13764) роутер.\n\n#### Зачем?\n\nЧтобы использовать привычный способ конфигурирования роутов через Yaml.\n\n#### Использование\n\nФайл описания маршрутов (например, `/local/routes/web.php`): \n\n```php\nuse Prokl\\ServiceProvider\\ServiceProvider;\nuse Bitrix\\Main\\Routing\\Controllers\\PublicPageController;\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Agnostic\\BaseRoutesConfigurator;\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Utils\\BitrixRouteConvertor;\nuse Bitrix\\Main\\Routing\\RoutingConfigurator;\n\n// Не обязательно. Смотри ниже.\n$container = ServiceProvider::instance();\n\n$agnosticRouter = new BaseRoutesConfigurator(\n    $_SERVER['DOCUMENT_ROOT'] . '/local/configs/bitrix_routes.yaml', // Конфиг роутов\n    $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/routes', // Кэш; если null - без кэширования.\n    $_ENV['DEBUG']\n);\n$routeCollection = $agnosticRouter-\u003egetRoutes();\n\n$routeConvertor = new BitrixRouteConvertor($routeCollection);\n// Не обязательно. Без контейнера контроллеры будут инстанцироваться через new,\n// а не через контейнер. Но тогда уже без разрешения зависимостей.\n$routeConvertor-\u003esetContainer($container);\n\nreturn function (RoutingConfigurator $routes) use ($container, $routeConvertor, $routeCollection) {\n\n    $routeConvertor-\u003econvertRoutes($routes);\n};\n```\n\nВ случае, если контейнер подключается, то возможна краткая форма:\n\n```php\nuse Prokl\\ServiceProvider\\ServiceProvider;\nuse Bitrix\\Main\\Routing\\Controllers\\PublicPageController;\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Utils\\BitrixRouteConvertor;\nuse Bitrix\\Main\\Routing\\RoutingConfigurator;\n\n// Не обязательно. Смотри ниже.\n$container = ServiceProvider::instance();\n\n$routeCollection = $container-\u003eget('bitrix_native_routes.routes.collection');\n\n$routeConvertor = new BitrixRouteConvertor($routeCollection);\n// Не обязательно. Без контейнера контроллеры будут инстанцироваться через new,\n// а не через контейнер. Но тогда уже без разрешения зависимостей.\n$routeConvertor-\u003esetContainer($container);\n\nreturn function (RoutingConfigurator $routes) use ($container, $routeConvertor, $routeCollection) {\n\n    $routeConvertor-\u003econvertRoutes($routes);\n\n    $routes-\u003eget('/', new PublicPageController('/index.php'));\n\n};\n```\n\nПример файла с конфигурацией роутов (обычный yaml файл с роутами для Symfony):\n\n```yaml\nfirst_bitrix_route:\n  path: /foo/{param}/\n  controller: 'Prokl\\BitrixSymfonyRouterBundle\\Tests\\Fixture::cacheAction'\n  methods: GET|POST\n  requirements:\n    param: '\\d+'\n  defaults:\n    param: 'Russia'\n\n# Старые статические страницы\n# / =\u003e /index.php\npublic_page:\n  path: /\n  controller: ''\n  defaults:\n    _public: true # Ключевой признак\n\n```\n\nЕсли установлен Битрикс с версией модуля младше `21.400.0`, то соответствующие сервисы будут\nудалены из бандла на стадии компиляции.\n\n## Использование роутера без контейнера и вне фреймворка\n\n`init.php`:\n\n```php\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Agnostic\\BaseRoutesConfigurator;\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Agnostic\\Router;\nuse Prokl\\BitrixSymfonyRouterBundle\\Services\\Agnostic\\BitrixInitializerRouter;\n\n$agnosticRouter = new BaseRoutesConfigurator(\n    $_SERVER['DOCUMENT_ROOT'] . '/local/configs/standalone_routes.yaml',\n    $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/routes_agnostic', // Кэш; если null - без кэширования.\n    $_ENV['DEBUG'] // Режим отладки или нет\n);\n\n$agnosticRouterInstance = new Router(\n    $agnosticRouter-\u003egetRouter(),\n    new BitrixInitializerRouter()\n);\n```\n\nВсе. Подтянутся роуты из `/local/configs/standalone_routes.yaml`. Автоматически подцепятся события.\n\nДопускается наличие нескольких таких \"агностических\" роутеров в один момент.\n\n## Прочее\n\n1) Экземпляр `Symfony\\Component\\Routing\\Router` (роуты Symfony) можно получить снаружи так:\n\n```php\n$router = \\Prokl\\BitrixSymfonyRouterBundle\\Services\\Agnostic\\SymfonyRoutes::getInstance();\n```\n\n2) Как загрузить роуты бандлы:\n\nВ файле `Extension` бандла:\n\n```php\n    public function load(array $configs, ContainerBuilder $container) : void\n    {\n        // ....\n         $this-\u003eloadRoutes(__DIR__ . '/../Resources/config', 'routes.yaml');\n    }\n\n    /**\n     * Загрузить роуты в бандле.\n     *\n     * @param string $path   Путь к конфигу.\n     * @param string $config Конфигурационный файл.\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException Нет класса-конфигуратора роутов.\n     */\n    private function loadRoutes(string $path, string $config = 'routes.yaml') : void\n    {\n        $routeLoader = new \\Symfony\\Component\\Routing\\Loader\\YamlFileLoader(\n            new FileLocator($path)\n        );\n\n        $routes = $routeLoader-\u003eload($config);\n\n        if (class_exists(InitRouter::class)) {\n            InitRouter::addRoutesBundle($routes);\n            return;\n        }\n\n        throw new InvalidArgumentException('Class InitRouter not exist.');\n    }\n```\n\nИли воспользоваться трэйтом `Prokl\\BitrixSymfonyRouterBundle\\Services\\Utils\\LoaderBundleRoutesTrait`,\nкуда вынесен этот метод.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproklung%2Fbitrixsymfonyrouterbundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproklung%2Fbitrixsymfonyrouterbundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproklung%2Fbitrixsymfonyrouterbundle/lists"}