在 Laravel 支不支持类似于 REST 中 patch 的更新方式呢?

之前学习Rails框架时候,看到其本身是实现了patch的更新方式了的,即这个请求可以只更新这个字段,而不是put的更新方式,会把其它其实并没有变化的字段也传送过来,在laravel中是否有这样的方法呢?
如果没有,想自己写一套,但是还有一些疑问,在laravel中,是以request对象接收前端传递过来的参数的,而不像rails和之前使用的springMVC框架中可以以一个对象的形式进行接收,就是rails框架本身传递过来的时候,其前端input标签的属性值就可以设置为对象.属性(类似于user.name),而java中是springMVC将其封装到一个对象中,我也没有找到php中有相关的如何封装请求数据到一个对象中的方法?
最想知道的是,laravel能不能类似于rails的实现patch更新的原理,是更新数据库的时候,知道哪些字段没有传过来,只更新传过来的字段?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

说点浅显的想法,基于现在的知识,没有做过测试。

在 5.3 里面路由已经支持 patch文档 方法了。

PATCH 是 Http 里面新定义的一个请求方法,Laravel 之前的版本没有。

再说说

在laravel中,是以request对象接收前端传递过来的参数的,而不像rails和之前使用的springMVC框架中可以以一个对象的形式进行接收,就是rails框架本身传递过来的时候,其前端input标签的属性值就可以设置为对象.属性(类似于user.name),而java中是springMVC将其封装到一个对象中,我也没有找到php中有相关的如何封装请求数据到一个对象中的方法?

其实不管是 laravel rails 还是java,接收的请求都是标准的 http 请求,不存在说 “前端input标签的属性值就可以设置为对象.属性”,如果你去看 rails 生成的表单,你会发现 input 表单的 name 属性是 name="user[name]", 而不是我们通常在 laravel 里面定义的 name = "name" 。这样的好处就是后台接收到的请求其实是一个 user 数组,在 rails 里面应该叫 hash 吧。

至于给你的印象为什么rails 可以把请求封装成对象,应该是 rails 把一个标准的 http request 处理成一个 rails 的request,就像 laravel 里面一样,把http 标准request 处理成一个 SymfonyRequest一样。

如果你在laravel 的表单中也用 name="user[name]" 这种形式,后台用 $request->user ,不是一样类似于发送了一个 对象吗?

浅薄的见解,欢迎指出错误。

8年前 评论

谢谢帮助~你的想法是对的,确实这样可以接收到这个user对象,但是如果我想直接保存这个接收到的user对象,而不是每次把它其中的属性取出来再赋值给本身的user实体,就是我通过$user=$request['user']接收到对应的数据之后,有没有办法直接$user->save()这样子调用呢,还是确实要一个个属性去复制,然后再保存呢?

8年前 评论

@梁念 应该不行吧 在 rails 中应该也是通过 user.update_attributes(params.require(:user)) 这种方式去更新的,没有直接 $user.save 的写法吧(我对rails 不太熟,不知道对不对) ?相应的,在 laravel 中 也要通过 User::update($user) 这种方式更新。

确实这样可以接收到这个user对象 这个是错误的,我只是说类似于获取到了对象,但是还是一个数组,不要被我误导了 。。
通过$reuquest->user 只是获取到了 http 发送的这些字段数组。

8年前 评论

@oustn 确实是这样子的,之前是我理解不够深.其实rails中也是根据接收到的数组来进行更新的~laravel中要使用 User::update($user) 这种方式的话,其实前面需要先使用where条件找到对应的数据才能更新的吧,并且主键是不能放在$user中的,我把主键也放入到$user数组中是会报错的.

8年前 评论

@梁念 对 我写错了 要更新数据的话当然是基于找到的那个模型了

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!