2017-05-21 14 views
3

我想在Expressive中使用FastRoute的路由组。 样件:Zend Expressive中的FastRoute Groups

$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中完成吗? 请帮助我。

回答

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