我没有测试过这个确切的代码,但我使用了类似的东西并且它有效:
Route::any('auth/{action}', function($action){
$controller = new UserController();
$controller->$action();
});
您可能会发现您还需要处理参数,如下所示:
Route::any('auth/{action}/{param}', function($action, $param){
$controller = new UserController();
$controller->$action($param);
});
你甚至可以调整它来覆盖你所有的控制器:
Route::any('{controller}/{action?}/{param?}', function($controller,$action='index',$param=null)
{
$controller = str_replace(' ', '', ucwords(str_replace('-', ' ', $controller))).'Controller';
$controller = new $controller;
$action = lcfirst(str_replace(' ', '', ucwords(str_replace('-', ' ', $action))));
return $controller->$action($param);
});
如果你想要一个带有参数的索引操作,那是行不通的,但除此之外,它似乎工作得很好。如果您想这样做,它也不会处理第二个参数。
有很多方法可以扩展这个想法。
Jason 的回答更正确,(与文档、更简洁的代码等相匹配)但如果您不想考虑 HTTP 方法,或者您想要一种主路由来处理几乎每个请求,这是一个选项。