📜  拉拉维尔 | Route::resource vs Route::controller(1)

📅  最后修改于: 2023-12-03 15:39:46.808000             🧑  作者: Mango

拉拉维尔 | Route::resource vs Route::controller

简介

在 Laravel 框架中,我们可以使用如下两种方式来定义路由:

  • Route::resource
  • Route::controller

这两种方式都可以用来定义 RESTful 风格的路由,但是它们的使用方法有所不同。

Route::resource

Route::resource 方法用来定义资源路由,它可以为一个控制器定义多个路由,包括 GET, POST, PUT, PATCH 和 DELETE 方法。

Route::resource('posts', 'PostController');

上面的代码定义了一个名为 posts 的资源路由,对应的控制器是 PostController

使用 php artisan route:list 命令可以查看 Route::resource 定义的路由:

|        | GET|HEAD  | posts                     | posts.index   | App\Http\Controllers\PostController@index   | web        |
|        | POST      | posts                     | posts.store   | App\Http\Controllers\PostController@store   | web        |
|        | GET|HEAD  | posts/create              | posts.create  | App\Http\Controllers\PostController@create  | web        |
|        | GET|HEAD  | posts/{post}              | posts.show    | App\Http\Controllers\PostController@show    | web        |
|        | PUT|PATCH | posts/{post}              | posts.update  | App\Http\Controllers\PostController@update  | web        |
|        | DELETE    | posts/{post}              | posts.destroy | App\Http\Controllers\PostController@destroy | web        |
|        | GET|HEAD  | posts/{post}/edit         | posts.edit    | App\Http\Controllers\PostController@edit    | web        |

可以看到,Route::resource 方法为 PostController 定义了 7 个路由,用来对应 indexstorecreateshowupdatedestroyedit 这些方法。

Route::controller

Route::controller 方法可以用来定义包含多个方法的控制器路由,这种方式常用于快速原型开发、小型项目或者测试。

Route::controller('posts', 'PostController');

上面的代码定义了一个名为 posts 的控制器路由,对应的控制器也是 PostController

使用 php artisan route:list 命令可以查看 Route::controller 定义的路由:

| GET|HEAD | posts                    | posts.index   | App\Http\Controllers\PostController@getIndex   | web        |
| POST     | posts                    | posts.store   | App\Http\Controllers\PostController@postIndex   | web        |
| GET|HEAD | posts/create             | posts.create  | App\Http\Controllers\PostController@getCreate  | web        |
| DELETE   | posts/{post}             | posts.destroy | App\Http\Controllers\PostController@deleteItem | web        |
| GET|HEAD | posts/{post}             | posts.show    | App\Http\Controllers\PostController@getItem   | web        |
| PUT      | posts/{post}             | posts.update  | App\Http\Controllers\PostController@putItem    | web        |
| GET|HEAD | posts/{post}/edit        | posts.edit    | App\Http\Controllers\PostController@getEdit    | web        |

可以看到,Route::controller 方法的路由规则和 Route::resource 方法有所不同,不再以 HTTP 请求方法来命名路由,而是使用控制器方法的名称来命名路由,这样可以将所有路由都指向控制器的方法。

区别
  • Route::resource 适合用于定义 RESTful 风格的路由,可以很方便地定义出 POST, PUT, PATCH 和 DELETE 等请求方法。
  • Route::controller 适合用于快速原型开发、小型项目或者测试,它可以为一个控制器定义多个路由,从而快速创建一些简单的路由。
结论

总的来说,Route::resource 更为常用,适合用于定义正式项目的路由;而 Route::controller 则适合用于快速原型开发、小型项目或者测试。