2017-05-21 11 views
3

Je veux utiliser des groupes de routes pour FastRoute dans Expressive. Comme échantillon:Groupes FastRoute dans Zend 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); 
}); 

J'ai créé des usines comme écrit dans docs (https://docs.zendframework.com/zend-expressive/features/router/fast-route/#advanced-configuration) et enregistrer leur en 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, 
], 
// ... 

Maintenant, je ne peux pas savoir où écrire la configuration et comment activer il. Est-ce que cela peut être fait dans le fichier config/router.php? Aidez-moi, s'il vous plaît.

Répondre

1

vous pouvez les mettre dans config.router.php tant que le fichier est fusionné avec le reste de votre configuration.

'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, 
     /* ... */ 
    ], 
], 

Notez la clé dependencies et que votre RouterFactory remplace le FastRouteRouterFactory parce qu'il partage la même clé de configuration.