【问题标题】:What is the value of using PUT/DELETE with Laravel?在 Laravel 中使用 PUT/DELETE 有什么价值?
【发布时间】:2023-03-09 14:00:01
【问题描述】:

对于使用Route::resource 将路由定义为资源,文档指出:

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

根据典型的 REST CRUD,因此 PUT/PATCH 用于更新操作,DELETE 用于销毁操作。我认为这是为了定义典型的资源交互,即使手动定义我自己的路由和控制器操作也是如此。

以下是我对这些与 Laravel 交互的理解的核心:

PUT 和 DELETE 仅仅是为了创建外部可访问的 json REST API,还是用于其他目的?除了使用不同的端点路由到相同的 URI,强制在 $_POST 或 json 中存在 _method 之外,还有其他好处吗?

PUT 和 DELETE 应该是幂等的,但这甚至在 Laravel 中实现了吗?这是我必须在我的控制器中发生的事情,还是路由以某种方式强制执行?

本质上,如果 Laravel 中的 PUT 和 DELETE 在功能上与 POST 相同,除了 REST 语义和并行路由之外,我何时以及为什么应该在 POST 上使用它们?

【问题讨论】:

  • 答案包含在您的问题中 - 如果您需要这些动词,则在处理 RESTful 操作时应该使用 PUT 和 DELETE。与所有事情一样 - 您实际上不必这样做。
  • 我试图通过包含场景的完整描述来明确问题,但你说得对,它是领先的。您的回答是,是的,它们仅用于外部 REST API,除了符合 REST 交互模型的标准动词之外,它们没有任何好处?没有幂等性或其他含义?在内部,我可以对同一个函数使用 POST 和不同的 URI。多么令人失望。关于缺乏幂等性的任何来源?如果你能把它作为答案,我可以接受。
  • 简答:清晰。如果您正在进入一个新项目并浏览 Routes 以查看正在发生的事情,并且您会看到 route::post,那么您真正知道的就是该路线上发布了一些东西。如果您看到route::delete,您就知道在该操作结束时,应该删除某些内容。 Laravel 的首要原则之一是确保代码具有表现力。
  • 虽然 HTML 表单只支持 GET 和 POST,但几乎所有的 AJAX 实现都支持 PUT 和 DELETE。 stackoverflow.com/questions/8785248/…
  • @JamesBinford 这就是我所说的“REST 语义”和“符合 REST 交互模型的标准动词”的意思。这都是语义的。如果路由具有描述性 URI 和/或映射到描述性控制器操作,那么它也应该是清楚的。当然,它会强制_method 与这些动词的存在,但是当它缺乏分隔背后的功能(在这种情况下是幂等性)时,它实际上变得纯粹是语义,类似于许多简单地解析为 s 最后,只会膨胀源。

标签: php laravel-4


【解决方案1】:

当你想更新记录时使用PUT方法,当你想删除记录时使用DELETE方法。

注意在resourceful controller中,PUTDELETE方法都指向同一个url (resource/{resource}),所以如果不区分PUT或者DELETE的方法,就会出问题.

【讨论】:

  • 我认为有些东西被遗漏了。在询问如何定义我自己的路线之前,我以 Route::Resource 为例。我并没有要求 REST 中的预期用途。我专门询问功能意义。即使在适当的 REST 中,它们在幂等方面也很重要,但 Laravel 忽略了这一点。假设由于超出问题范围的某种原因,我没有使用 REST——它们只是路由器设计的 POST 的传递。我问的是,当它们不能按正确的 REST 预期工作时它们有什么用处。无论如何,这个答案太短了——你能改进一下吗?谢谢。
【解决方案2】:

GET:要获取数据,

POST:提交数据,

PUT:要更新数据,

删除:销毁数据

【讨论】:

  • 有什么区别?
  • 当我需要删除数据时,我可以使用这个方法:Post::whereId(1)->delete(); - 那么,有什么区别?)
猜你喜欢
  • 2012-08-21
  • 2021-05-08
  • 2013-08-26
  • 2018-12-19
  • 2010-10-28
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多