FastRoute группы в Zend Expressive

Я хочу использовать группы маршрутов для FastRoute в Expressive.
Как образец:

$router = $app->getContainer()->get(FastRoute\RouteCollector::class);

$router->get('/', App\Action\HomePageAction::class);

$router->addGroup('/pages', function (FastRoute\RouteCollector $router) {
$router->get('', App\Action\PagesIndexAction::class);
$router->get('/add', App\Action\PagesAddAction::class);
$router->get('/edit/{id}', App\Action\PageEditActionFactory::class);
$router->post('/edit/{id}', App\Action\PageEditActionFactory::class);
$router->get('/another/{section}[/{subsection}]', PagesAnotherActionFactory::class);
});

Я создал фабрики как написано в документах (https://docs.zendframework.com/zend-expressive/features/router/fast-route/#advanced-configuration)
И зарегистрировать их в router.global.php:

// ...
'factories' => [
FastRoute\RouteCollector::class => App\Container\FastRouteCollectorFactory::class,
FastRoute\DispatcherFactory::class => App\Container\FastRouteDispatcherFactory::class,
Zend\Expressive\Router\RouterInterface::class => App\Container\RouterFactory::class,
],
// ...

Теперь я не могу понять, где написать конфигурацию и как ее активировать.
Можно ли это сделать в файле config/router.php?
Помоги мне, пожалуйста.

3

Решение

Вы можете положить их в config.router.php пока файл объединен с остальной частью вашего конфига.

'dependencies' => [
//..
'invokables' => [
/* ... */
// Comment out or remove the following line:
// Zend\Expressive\Router\RouterInterface::class => Zend\Expressive\Router\FastRouteRouter::class,
/* ... */
],
'factories' => [
/* ... */
// Add this line; the specified factory now creates the router instance:
FastRoute\RouteCollector::class => App\Container\FastRouteCollectorFactory::class,
FastRoute\DispatcherFactory::class => App\Container\FastRouteDispatcherFactory::class,
// Zend\Expressive\Router\RouterInterface::class => Zend\Expressive\Router\FastRouteRouterFactory::class, // replaced by following line
Zend\Expressive\Router\RouterInterface::class => App\Container\RouterFactory::class,
/* ... */
],
],

Обратите внимание dependencies ключ и что ваше собственное RouterFactory заменяет FastRouteRouterFactory потому что он разделяет тот же ключ конфигурации.

1

Другие решения

Это не поддерживается и я не уверен, может ли это быть реализовано в FastRoute.

Вы можете проверить тему «Zend router — дочерние маршруты«

0

По вопросам рекламы [email protected]