Laravel - Route::resource vs Route::controller

8 浏览
0 Comments

Laravel - Route::resource vs Route::controller

我在Laravel官网、Stack Overflow和Google上阅读了相关文档,但仍然不理解Route::resourceRoute::controller之间的区别。有人在回答中说,Route::resource用于crud,但是我们使用Route::controller也能完成相同的操作,并且可以指定需要的操作。它们看起来像兄弟一样:

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

如何选择使用哪个?什么是良好的实践?

admin 更改状态以发布 2023年5月24日
0
0 Comments

对于路由控制器方法,我们只需要定义一个路由。在GET或POST方法中,我们必须单独定义路由。

而资源方法用于创建多条路由,以处理各种Restful动作。

这里是关于这个的 Laravel 文档

0
0 Comments

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

你可以像下面这样设置你的控制器(操作等同于方法):

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']
]);

API资源控制器

Laravel 5.5添加了另一种处理资源控制器路由的方法API资源控制器,它与上述方法完全相同,但不注册createedit路由。它旨在用于映射RESTful API中使用的路由 - 在这些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'
    }
}

隐式控制器文档

根据您的偏好和需求,使用您所需的最佳实践。我个人不喜欢使用隐式控制器,因为它们可能难以维护,不提供命名并且在使用php artisan routes时可能会造成混淆。通常我会使用RESTful资源控制器和显式路由相结合的方式。

0