Laravel-Route: : 资源对 Route: : 控制器

我阅读了 Laravel 网站、 Stack Overflow 和 Google 上的文档,但仍然不明白 Route::resourceRoute::controller之间的区别。

其中一个答案是: 路线: : 资源是为了脏。然而,使用 Route: : controller 我们可以完成与 Route: : resource 相同的事情,并且我们只能指定需要的操作。

他们看起来就像兄弟姐妹:

Route::controller('post','PostController');
Route::resource('post','PostController');

我们如何选择使用什么? 什么是好的做法?

223123 次浏览

RESTful 资源控制器

RESTful 资源控制器为您设置一些默认路由,甚至为它们命名。

Route::resource('users', 'UsersController');

给你这些指定的路线:

Verb          Path                        Action  Route Name
GET           /users                      index   users.index
GET           /users/create               create  users.create
POST          /users                      store   users.store
GET           /users/{user}               show    users.show
GET           /users/{user}/edit          edit    users.edit
PUT|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

您可以像这样设置您的控制器(action = method)

class UsersController extends BaseController {


public function index() {}


public function show($id) {}


public function store() {}


}

您也可以像下面这样选择包含或排除哪些操作:

Route::resource('users', 'UsersController', [
'only' => ['index', 'show']
]);


Route::resource('monkeys', 'MonkeysController', [
'except' => ['edit', 'create']
]);

资源控制器

Laravel 5.5增加了另一种处理资源控制器路由的方法。API 资源控制器的行为与上面显示的完全一样,但是没有注册 createedit路由。它是为了方便 RESTful API 中使用的映射路由而使用的——在 RESTful API 中,通常没有任何类型的数据位于 createedit方法中。

Route::apiResource('users', 'UsersController');

RESTful 资源控制器文档


隐式控制器

隐式控制器更灵活。根据 HTTP 请求类型和名称将路由到控制器方法。但是,您没有为您定义路由名称,它将捕获同一路由的所有子文件夹。

Route::controller('users', 'UserController');

将引导您使用一种 RESTful 命名方案来设置控制器:

class UserController extends BaseController {


public function getIndex()
{
// GET request to index
}


public function getShow($id)
{
// get request to 'users/show/{id}'
}


public function postStore()
{
// POST request to 'users/store'
}


}

隐式 Controller 文档


按照你的喜好使用你需要的东西是一个很好的实践。我个人不喜欢的 隐式控制器,因为他们可以是凌乱的,不提供名称,可以混淆时使用 php artisan routes。我通常将 RESTful 资源控制器与显式路由结合使用。

对于路由控制器方法,我们只需要定义一个路由。在 get 或 post 方法中,我们必须分别定义路由。

而 resources 方法用于创建多个路由来处理各种 Restful 操作。

这是 Laravel 的 文件

我在我的项目中使用 Laravel 8

在我的路线文件 web.php 中 我加上这条路线

Route::controller(SitesController::class)->group(function() {
Route::get('index', 'index')->name('index');
}
  1. 在 Route: : Controller 组中,我们传递将要使用的控制器名称
  2. 在组内部,我们定义路由,我们将使用如下语法

Method-used (‘ prefix in the URL’,‘ function used in the fiedcontroller’)-> name () ; 如果代码中没有使用该名称,就删除它