diff --git a/Services/Utils/BitrixRouteConvertor.php b/Services/Utils/BitrixRouteConvertor.php index 62023d9..663c7be 100644 --- a/Services/Utils/BitrixRouteConvertor.php +++ b/Services/Utils/BitrixRouteConvertor.php @@ -3,6 +3,7 @@ namespace Prokl\BitrixSymfonyRouterBundle\Services\Utils; use Bitrix\Main\Engine\Controller; +use Bitrix\Main\Routing\Controllers\PublicPageController; use Bitrix\Main\Routing\RoutingConfigurator; use LogicException; use RuntimeException; @@ -75,6 +76,13 @@ public function convertRoute(string $name, Route $route, RoutingConfigurator $ro } $path = $route->getPath(); + + // Старые статические страницы + if ($route->getDefault('_public') === true) { + $routes->get($path, new PublicPageController($path . 'index.php')); + return; + } + $controller = $this->parseControllerString($name, $route->getDefault('_controller')); if (!is_subclass_of($controller[0], Controller::class)) { @@ -104,7 +112,7 @@ public function convertRoute(string $name, Route $route, RoutingConfigurator $ro $processedRoute = $routes->any($path, [$service, $controller[1]]); $processedRoute = $processedRoute->methods($methods) - ->name($name); + ->name($name); foreach ($route->getRequirements() as $reqParam => $reqValue) { $processedRoute = $processedRoute->where($reqParam, $reqValue); @@ -130,7 +138,7 @@ public function convertRoute(string $name, Route $route, RoutingConfigurator $ro private function parseControllerString(string $name, $controller) : array { $argument = $controller; - if (is_string($controller)) { + if (is_string($controller) && $controller) { if (strpos($controller, '::') !== false) { $controller = explode('::', $controller, 2); if (strpos($controller[1], 'Action') === false) { diff --git a/Tests/Fixture/bitrix_routes.yaml b/Tests/Fixture/bitrix_routes.yaml index 751eb2a..2fa4376 100644 --- a/Tests/Fixture/bitrix_routes.yaml +++ b/Tests/Fixture/bitrix_routes.yaml @@ -7,4 +7,10 @@ first_bitrix_route: defaults: param: 'Russia' - +# Старые статические страницы +# / => /index.php +public_page: + path: / + controller: '' + defaults: + _public: true # Ключевой признак diff --git a/readme.MD b/readme.MD index 5ce0d93..967709f 100644 --- a/readme.MD +++ b/readme.MD @@ -59,9 +59,6 @@ $routeConvertor->setContainer($container); return function (RoutingConfigurator $routes) use ($container, $routeConvertor, $routeCollection) { $routeConvertor->convertRoutes($routes); - - $routes->get('/', new PublicPageController('/index.php')); - }; ``` @@ -96,13 +93,22 @@ return function (RoutingConfigurator $routes) use ($container, $routeConvertor, ```yaml first_bitrix_route: - path: /countries/{country}/ - controller: 'Local\ExampleBitrixActionController::cacheAction' + path: /foo/{param}/ + controller: 'Prokl\BitrixSymfonyRouterBundle\Tests\Fixture::cacheAction' methods: GET|POST requirements: - country: '\d+' + param: '\d+' defaults: - country: 'Russia' + param: 'Russia' + +# Старые статические страницы +# / => /index.php +public_page: + path: / + controller: '' + defaults: + _public: true # Ключевой признак + ``` Если установлен Битрикс с версией модуля младше `21.400.0`, то соответствующие сервисы будут