新用 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(),无法找到该数据。
1
sunorg OP |
2
mamahaha 2020-12-08 15:58:53 +08:00
哈哈哈,先知。。。。。。这是阿拉伯的程序员吗?
|
4
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 |
5
Xusually 2020-12-08 16:43:35 +08:00
|
6
sunorg OP @xlcoder166 除了 has,我试过 all 函数,还试过单独获取,一样的结果。
@Xusually 调试几轮后,只要能有所响应就行,合理不,丑不,不是这里讨论。我只在乎他能有个响,但它没… /狗头 |
8
vacker 2020-12-08 19:24:39 +08:00 via Android
看是不是 crsf 的问题
|
10
Xusually 2020-12-08 21:58:08 +08:00
@sunorg 我就是看你这个不太合情理,临时 laravel new 了一个新项目,就关了 csrf,复制了你的代码,啥也没改。
不关 csrf 的话用 paw 这些工具简易测试容易 419,请求进不去。 |
11
ooh 2020-12-08 22:19:12 +08:00
看上去代码没啥问题,$_POST 打印出来是啥 看看是不是 email 这五个字符不一样
|
12
chengfeng 2020-12-08 22:38:12 +08:00
注意下你的中间件,可以先把中间件去掉试试
|
13
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) |
15
zachlhb 2020-12-09 08:46:52 +08:00 via Android
改请求头数据类型改成 urlencode 那个
|
16
weirdo 2020-12-09 09:17:09 +08:00
目测 multipart/form-data 和 application/x-www-form-urlencoded 引起的
如果只是写接口,建议统统用 json |
17
skys215 2020-12-09 09:34:57 +08:00
用$request->all()可以获取所有数据,用它提供的方法,不要自己通过魔术变量$_POST 获取
|
18
ben1024 2020-12-09 09:40:42 +08:00
用 dd() 试试
|
19
Unicorns96 2020-12-09 10:16:12 +08:00
request 打印出来看看
|
20
sunorg OP |
21
agdhole 2020-12-09 10:22:38 +08:00 via iPhone
看起来是中间件出了故障
|
23
cgpiao 2020-12-09 10:45:30 +08:00
设置 Content-Type 看看。
|
24
cbasil 2020-12-09 11:04:05 +08:00
has(input)只会检测 input 是否存在,而不会检测他的只是否为空,如果你想要判断一个值在请求中是否存在,并且不为空,可以使用 filled 方法:
if ($request->filled('name')) { // } |
25
skys215 2020-12-10 10:19:25 +08:00
你在 index.php 第 2 行把$_POST 打印出来看看
如果存在,则说明是代码中的某个位置把它删除了 如果不存在,就不是代码的问题了 |