Laravel - Route::resource vs Route::controller

yk9xbfzb  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(107)

我读了Laravel网站、Stack Overflow和Google上的文档,但仍然不明白Route::resourceRoute::controller之间的区别。
其中一个答案说Route::resource用于crud。然而,使用Route::controller,我们可以完成与Route::resource相同的事情,并且我们可以只指定所需的操作。
他们看起来像兄弟姐妹:

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

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

wfauudbj

wfauudbj1#

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


你可以这样设置你的控制器(actions = methods)

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路由。它的目的是为了方便MapRESTful 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资源控制器与显式路由结合使用。

q5lcpyga

q5lcpyga2#

对于路由控制器方法,我们只需要定义一个路由。在get或post方法中,我们必须单独定义路由。
resources方法用于创建多个路由来处理各种Restful操作。
这里是Laravel的文档。

iyzzxitl

iyzzxitl3#

我在项目中使用Laravel 8
然后在我的路由文件web.php中添加这个路由

Route::controller(SitesController::class)->group(function() {  
            Route::get('index', 'index')->name('index');
}

字符串
1.在Route::controller组中,我们传递要使用的控制器名称
1.在组内部,我们定义路由,我们将使用如下语法
Route::method-used('prefix in the URL ','function used in the specified controller ')->name();如果你的代码中没有用到这个名字,就把它删除

7vux5j2d

7vux5j2d4#

总之

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

字符串

  • 它将允许RESTful路由和默认的访问方法从控制器,可以自定义。
  • RESTful资源控制器

然而

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

  • 控制器的所有方法都可从路由直接访问。
  • 假设PostControllergetUsers()方法,
  • 那么路由将是,GET posts/users
  • 隐式控制器

要列出所有可用路由,请使用php artisan route:list命令。

相关问题