当前位置: 首页 > 知识库问答 >
问题:

Laravel-Route::资源vs Route::controller

丁阳羽
2023-03-14

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

其中一个答案是Route::resource用于crud。但是,使用Route::controller,我们可以完成与Route::resource相同的任务,并且我们只能指定所需的操作。

他们看起来像兄弟姐妹:

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

我们如何选择使用什么?什么是好的实践?

共有2个答案

松旭
2023-03-14

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

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

这里是关于这方面的Laravel文档。

微生城
2023-03-14

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

Laravel 5.5增加了另一种处理资源控制器路由的方法。API资源控制器的行为与上图所示完全相同,但不注册创建编辑路由。它的目的是为了便于RESTful API中使用的映射路由——在RESTful API中,您通常没有任何类型的数据位于创建编辑方法中。

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资源控制器与显式路由结合使用。

 类似资料:
  • 上下文我在Laravel8中工作,我使用DataTables插件来显示数据库中的记录。正如您将在代码中看到的,我使用Route::resource('animal','AnimalController')创建了所有要执行CRUD的路由。这将为销毁方法生成如下路径:animal/{id} 问题。当我按下特定记录的删除按钮时,记录会被删除,没关系,但是浏览器控制台会返回这个错误:“此路由不支持DELE

  • 作为 laravel 极其重要的一部分,route 功能贯穿着整个网络请求,是 request 生命周期的主干。本文主要讲述 route 服务的注册与启动、路由的属性注册。本篇内容相对简单,更多的是框架添加路由的整体设计流程。 route 服务的注册 laravel 在接受到请求后,先进行了服务容器与 http 核心的初始化,再进行了请求 request 的构造与分发。 route 服务的注册——

  • 简介 Laravel Mix 提供了简介且可读性高的 API,用于使用几个常见的 CSS 和 JavaScript 预处理器为应用定义 Webpack 构建步骤。可以通过简单链式调用来定义资源的编译。例如: mix.js('resources/assets/js/app.js', 'public/js') .sass('resources/assets/sass/app.scss', 'pu

  • 当进行了路由匹配与路由参数绑定后,接下来就要进行路由闭包或者控制器的运行,在此之前,本文先介绍中间件的相关源码。 中间件的搜集 由于定义的中间件方式很灵活,所以在运行控制器或者路由闭包之前,我们需要先将在各个地方注册的所有中间件都搜集到一起,然后集中排序。 public function dispatchToRoute(Request $request) { $route = $this-

  • 作为一个 web 后台框架,路由无疑是极其重要的一部分。本博客接下来几篇文章都将会围绕路由这一主题来展开讨论,分别讲述: 路由的使用 路由属性注册 路由的正则编译与匹配 路由的中间件 路由的控制器与参数绑定 RESTful 路由 和之前一样,第一篇将会利用单元测试样例说明我们在平时可能用到的 route 的 api 函数用法,后面几篇文章将会剖析 laravel 的 route 源码。下面开始介绍

  • 当所有的路由都加载完毕后,就会根据请求的 url 来将请求分发到对应的路由上去。然而,在分发到路由之前还要经过各种中间件的计算。laravel 利用装饰者模式来实现中间件的功能。 从原始装饰者模式到闭包装饰者 装饰者模式是设计模式的一种,主要进行对象的多次处理与过滤,是在开放-关闭原则下实现动态添加或减少功能的一种方式。下面先看一个装饰者模式的例子: 总共有两种咖啡:Decaf、Espresso,