📅  最后修改于: 2023-12-03 15:39:46.808000             🧑  作者: Mango
在 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 个路由,用来对应 index
、store
、create
、show
、update
、destroy
和 edit
这些方法。
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
则适合用于快速原型开发、小型项目或者测试。