带控制器的智能路由
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
}
这样你应该能够实现你想要的,而不需要在你的路由文件中手动定义多个路由。
有一种方法可以使用我的控制器的方法自动设置路由吗?
示例:我有一个具有 '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
}
这样你应该能够实现你想要的,而不需要在你的路由文件中手动定义多个路由。