Laravel 的 post 问题,哪位先知给指点下

2020-12-08 15:49:15 +08:00
 sunorg

新用 Laravel 框架,当前版本 7.x, 现遇到一个问题:

写一 api 代码,已引入 request 依赖,get 请求可以得到数据,post 方式的文件上传也可以,但单纯 post 表单请求无法得到数据*。 具体代码如下

接口文件

  public function createUser(Request $request)
  {
        var_dump($_POST);  //有值,
       
        if($request->has(['email'])){
            return json_encode(['有数据'=>1]);
        }
        else{
            return json_encode(['没数据'=>0]);      //始终是没数据。
        }
        
  }

路由文件 api.php:

    Route::post('xxx/create-user', 'AdminController@createUser');
    

测试过程: 用 paw,选择 post 模式,设置变量 email=xxxx,测试 request->all(),无法找到该数据。

2561 次点击
所在节点    PHP
25 条回复
sunorg
2020-12-08 15:57:31 +08:00
附加另外一款 api 调试工具的结果,一样的。。。

![image.png]( https://01.urlnode.com/2020/12/08/image.png)
mamahaha
2020-12-08 15:58:53 +08:00
哈哈哈,先知。。。。。。这是阿拉伯的程序员吗?
sunorg
2020-12-08 16:02:27 +08:00
@mamahaha 尽可能的字面意思理解,哈哈。
xlcoder166
2020-12-08 16:10:38 +08:00
If you would like to determine if a value is present on the request and is not empty, you may use the filled method:

https://laravel.com/docs/8.x/requests#determining-if-an-input-value-is-present

1. has 只是判断存在 “eamil” 而不是值
2. 更好的判断方式 应该是 validate
Xusually
2020-12-08 16:43:35 +08:00
看下面。。这就尴尬了。。
sunorg
2020-12-08 18:44:12 +08:00
@xlcoder166 除了 has,我试过 all 函数,还试过单独获取,一样的结果。

@Xusually 调试几轮后,只要能有所响应就行,合理不,丑不,不是这里讨论。我只在乎他能有个响,但它没… /狗头
sunorg
2020-12-08 18:47:41 +08:00
@Xusually, 我一定疯魔了,眼花你的有值。 看来我得拿一个全新的项目来跟踪了…
vacker
2020-12-08 19:24:39 +08:00
看是不是 crsf 的问题
Xusually
2020-12-08 21:56:57 +08:00
@vacker csrf 的话,一般会报 419
Xusually
2020-12-08 21:58:08 +08:00
@sunorg 我就是看你这个不太合情理,临时 laravel new 了一个新项目,就关了 csrf,复制了你的代码,啥也没改。
不关 csrf 的话用 paw 这些工具简易测试容易 419,请求进不去。
ooh
2020-12-08 22:19:12 +08:00
看上去代码没啥问题,$_POST 打印出来是啥 看看是不是 email 这五个字符不一样
chengfeng
2020-12-08 22:38:12 +08:00
注意下你的中间件,可以先把中间件去掉试试
yekern
2020-12-09 07:37:08 +08:00
然鹅我这边并没有你这问题 可能是我这边版本过高?
[![r9Qk80.png]( https://s3.ax1x.com/2020/12/09/r9Qk80.png)]( https://imgchr.com/i/r9Qk80)
sunorg
2020-12-09 08:45:54 +08:00
@Xusually @chengfeng @yekern

我再跟下,看看是否是 sanctum 和中间件的问题
zachlhb
2020-12-09 08:46:52 +08:00
改请求头数据类型改成 urlencode 那个
weirdo
2020-12-09 09:17:09 +08:00
目测 multipart/form-data 和 application/x-www-form-urlencoded 引起的
如果只是写接口,建议统统用 json
skys215
2020-12-09 09:34:57 +08:00
用$request->all()可以获取所有数据,用它提供的方法,不要自己通过魔术变量$_POST 获取
ben1024
2020-12-09 09:40:42 +08:00
用 dd() 试试
Unicorns96
2020-12-09 10:16:12 +08:00
request 打印出来看看
sunorg
2020-12-09 10:19:15 +08:00
@zachlhb 已经是了。 一样无用

@weirdo 还是无用-,- 全 json 形式的话,其他伙伴配合改动大,只能继续_POST

@skys215 试过,但最终还是封装一个以前的 POST 过滤类,操作_post

@ben1024 dd 一样的结果。 还出现过再 7.x 系列,api 下 dd 有问题的情况。。



已经检查过中间件、路由配置等,暂时每发现问题,这代码不是从 0 开始,所以还得继续折磨。 接下来验证下是否是当前 santcum 的版本同时支持 spa 和 api 带来的一些副作用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/733361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX