为Laravel中的每个控制器和方法创建单个路由

时间:2014-02-24 04:29:22

标签: php laravel laravel-4

我可以设置默认路由,因此当我收到/home/index/home之类的请求时,它会重定向到home控制器的index操作,就像在其他框架中一样? 我知道我可以逐个设置它们,但我不想为每个请求添加路由,我只想为所有请求使用一条路由。

2 个答案:

答案 0 :(得分:3)

基本控制器旁边还有两种其他类型的控制器。您可以通过指定控制器的特殊路径来创建它们。使用这种技术,您不必为每个控制器创建一个路径,只需每个控制器一个。

Resource Controller

这将创建具有管理一个资源(如用户或产品)所需的相应HTTP谓词的所有方法。有一个table in the documentation包含哪个预定义路由与控制器的预定义方法匹配,表示您可以对方法执行的操作,如编辑,创建,销毁等:

Resource controller route-method list

无论如何,您仍然可以在资源控制器方法和路由旁边添加额外的方法和路由,请记住,在定义资源控制器路由之前必须执行此操作:

//Extra route for the resource controller.
Route::get('home/profile', 'HomeController@profile');
//Resource controller routes.
Route::resource('home', 'HomeController');

RESTful Controllers

我认为这更符合您的需求 创建RESTful控制器将自动为以HTTP动词开头的所有方法创建路由。

Route::controller('home', 'HomeController');

在此之后,您可以在HomeController

中创建类似这些的方法
public function getIndex() {
    //Code.
}
public function postProfile() {
    //Code.
}

框架将自动为它们创建路由,因此您可以通过HTTP POST访问postProfile()/home/profile路由。您也可以通过HTTP GET访问getIndex()/home/index

documentation也提到:

  

索引方法将响应控制器处理的根URI。

在我们的情况下,这意味着您也可以通过getIndex()/home/index路径访问/home方法。
如果你有一个方法有多个单词(一个单词以驼峰大小写字母开头),那么生成的路线在单词之间将有一个-,因此方法getAdminProfile()将有一个路径叫home/admin-profile

正如我在资源控制器部分所说,您仍然可以创建常规路由,只需确保在创建RESTful控制器路由之前创建它们。

最终答案

创建路由:Route::controller('home', 'HomeController');调用您的根方法getIndex()并使用HTTP谓词为每个其他方法添加前缀,例如userTool()应该成为getUserTools()

答案 1 :(得分:2)

如果您使用Route::controller(),只需为index()方法getIndex()命名。