我有一系列页面,目前看起来像这样作为路由定义:
$app->get('/{region}/{instance}/events', 'MyApp\EventsController::index');
$app->post('/{region}/{instance}/events', 'MyApp\EventsController::add');
$app->get('/{region}/{instance}/event/{id}', 'MyApp\EventsController::edit');
$app->post('/{region}/{instance}/event/{id}', 'MyApp\EventsController::update');
然后我有一个EventsController
类,它必须具有region
和instance
作为所有四个函数(、、、和index
)的参数。我想知道是否可以清理它,并可能将and值移动到全局对象中。add
edit
update
region
instance
$app
我很想能够做到
$app->mount('/{region}/{instance}/', new MyApp\EventsControllerProvider());
并EventsControllerProvider
验证region
和instance
变量,并将“事件”路由映射到该路径的顶部,但似乎挂载点不能包含变量(该ControllerProviderInterface::connect()
方法不允许额外的参数)。
有没有一种干净的方法可以做到这一点?想到了这个方法,好像和其他路由机制背道而驰:
$app->get('/{region}/{instance}/{action}' function($region, $instance, $action) use ($app) {
if ($app['myapp.valid-region']($region) === false) return $app->abort(404);
if ($app['myapp.valid-instance']($instance) === false) return $app->abort(404);
switch ($action) {
case 'events':
$c = new MyApp\EventsController();
return $c->index();
}
});