带控制器的智能路由

Intelligent routing with controller

有一种方法可以使用我的控制器的方法自动设置路由吗?

示例:我有一个具有 'home' 或 'index'、'about' 和 'contact' 方法的 PagesController。我可以为每个方法设置路由而无需显式输入它们吗?

类似

Route::?('PagesController');

Route::get('/{page}', 'PagesController@{page}');

?

是的,我是新来的 laravel...

不,这不可能。假设您使用标准 RESTful 方法,如索引、创建、编辑、存储、更新和销毁,那么是的,您可以只写:

Route::resource('cars', 'CarController');

并且您将为汽车列表创建路线,编辑路线,创建等等

Resource Controller 文档部分对此进行了解释。

但请记住,您始终可以创建 "catch" 所有其他 url 的路由,例如,您可以这样创建路由:

Route::get('{page?}', 'PagesController@handle')->where('page', '.+')

并且这条路线应该被定义为所有其他路线中的最后一条。

现在你可以像这样在这个控制器中定义 handle 方法:

public function handle($page = 'home') 
{
    // here you can put any logic you want, for example:

   if (method_exists($this, $page)) {
       return $this->$page();
   }

   abort(404);
}

现在您可以定义与您的网址匹配的方法,例如:

public function home()
{
   // return some response here
}

public function index()
{
  // return some response here
}

这样你应该能够实现你想要的,而不需要在你的路由文件中手动定义多个路由。