4

我想在 Expressive 中为 FastRoute 使用路由组。样例:

$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吗?请帮帮我。

4

2 回答 2

1

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因为它共享相同的配置密钥。

于 2017-05-22T09:23:37.563 回答
0

这不受支持,我不确定这是否可以在 FastRoute 中实现。

您可以查看线程“ Zend 路由器 - 子路由

于 2017-05-26T13:43:03.720 回答