Laravel PUT,PATCH,POST 究竟是如何实现的?

How exactly is Laravel PUT,PATCH,POST implementation?

我已经阅读了很多关于 HTTP 方法差异和确切优势的资源 据我所知,这似乎是一个更好地理解和使用 REST API 的合同。 我的困惑如下:

我有一个表格:

  <form action="{{ route('test') }}" method="POST">
        @csrf
        @method('PUT')
        <input type="text" name="input1" >
        <input type="text" name="input2" >
        <button type="submit">send </button>
    </form>

我有一个这样的 table :

| id | input1 | input2 | input3

| -- | -----  | ------ |----|

| 1  |   100  |  220   |  400    

在控制器中我更新我们发送的所有请求字段。

  public function test(Request  $request)
    {
      return  Setting::find(1)->fill( $request->all())->save();
    }

所有 PUT、PATCH、POST 方法的工作方式相同。
如果 PUT 应该完全重新生成资源,则 PUT 不会将 input3 更改为 NULL。 PATCH 改变了 input1 和 input2。 POST 也一样,因为我记下了资源 ID。

问题是确切的 DIFF 是多少? 资源告诉我们:

create - POST
read - GET
update - PUT
modify - PATCH
delete - DELETE

而我们可以使用 POST 更新、修改甚至删除。 当我们使用表单请求时,发送的数据是完全一样的。

我们听说 PUT 方法完全重新生成资源,但它并没有发生,它只更新 DB 中发送的字段(在上面的例子中只更新了 Input1 和 input2)
我认为当我们不使用包含所有输入的表单以及发送部分数据时它们会起作用。 在实施方面是否还有其他深刻而明显的差异?

希望这对某些方面有所帮助。

当我们使用 POST、PUT、PATCH 和 DELETE 时

我们可以有这样的路由路径:

'/comments'

同一条路线将处理所有事情:POST、PUT、PATCH 和 DELETE

否则我们就成功了:

'/comments/add', '/comments/delete', '/comments/update', '/comments/create'

当我们这样做时,我们可以选择使用一个控制器处理该路由,方法处理每种请求类型,我们甚至可以继续添加中间件并将某些功能限制为具有特定角色的某些用户。如果不可能,某些方法(函数)将太长。使方法简单和小巧也是最佳实践。

Link to similar post on Whosebug

我认为你对HTTP请求方式的理解有误。当然,它们都有区别,但不是你指的那样。

create - POST
read - GET
update - PUT
modify - PATCH
delete - DELETE 

上面几行说你必须使用特殊的 HTTP 方法来进行特殊的操作。这是否意味着我不能使用 GET 删除资源?不,它没有。从技术上讲,对于所有资源操作,您可以只使用一种具有不同 URL 的 HTTP 方法。当然,这是不好的做法,但这是可能的。 HTTP 方法仅显示如何 send 从客户端到服务器的数据,而不是如何 processing on server.

那么为什么我们必须对不同种类的操作使用不同的方法呢? 有一些现有的规则,他们说: 使用 POST 用于创建,PUT 用于更新等。如果您创建自己的应用程序,您希望它能够长期存在并由其他开发人员维护它,如果您坚持下去,维护您的系统会简单得多到一般规则。此外,不同的方法可以发送具有不同安全级别的数据,您必须了解这一点。