422 Unprocessable Entity ?

用 postman 调试 VerificationCodesController store 方法时不能通过验证

{
    "message": "422 Unprocessable Entity",
    "errors": {
        "phone": [
            "电话 不能为空。"
        ]
    },
    "status_code": 422,
    "debug": {
        "line": 22,
        "file": "/home/vagrant/code/larabbs/vendor/dingo/api/src/Http/FormRequest.php",
        "class": "Dingo\\Api\\Exception\\ValidationHttpException",
        "trace": [
            "#0 /home/vagrant/code/larabbs/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php(26): Dingo\\Api\\Http\\FormRequest->failedValidation(Object(Illuminate\\Validation\\Validator))",

postman 工具中,选择的时POST方法,并在body中有添加Key:phone,Value:手机号.
phone:13........

VerificationCodeRequest 类完全是从教程复制粘贴的,请问问题出在哪儿呢?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@liyu001989 大佬,把请求 body 用application/x-www-form-urlencoded 提交就出来了。

Content-Type:application/x-www-form-urlencoded

file

5年前 评论
bing_ 4年前
讨论数量: 16
liyu001989

能不能截个图,看一下postman 是怎么提交的

5年前 评论
liyu001989

是用的 homestead 吗,没看出来问题,你日志打印一下 request->all() 试一下,nginx 配置问题?

5年前 评论

@liyu001989 用的是 hemestead 。刚刚做了试验 Request 里注释了 require 规则,在控制器里直接返回 $request->phone 的值为NULL,大佬请问怎么破?

5年前 评论
leo
  1. 你的 headers 里面配置的是什么,截图出来看看
  2. 检查下 Key 字段下的 phone 前后有没有多空格
5年前 评论
liyu001989

我也没想通,你试试其他的参数能传过去吗

5年前 评论

@leo
emm...检测了,没多空格。
file

5年前 评论

@liyu001989 我试了,传递其他值也过不去。用 Illuminate\Support\Facades\Request 也不行,是NULL,然后我试了试这个框架下网站的注册登录,结果网站的注册登录是可以的。

5年前 评论
liyu001989

你下载 github 上的 larabbs 项目,配置一下环境对比一下,看看行不行吧

5年前 评论

@liyu001989 emmm... 也只有这样了。谢谢大佬。$request->all() 也没有数据 [ ] ,我现在很方。

5年前 评论

@liyu001989 大佬,把请求 body 用application/x-www-form-urlencoded 提交就出来了。

Content-Type:application/x-www-form-urlencoded

file

5年前 评论
bing_ 4年前
猪猪

大佬你这个问题怎么解决的呢,我也出现了和你一样的问题

4年前 评论

@猪猪 请求Body里,参数项的上面有几个类型选择,选择 application/x-www-form-urlencoded类型

4年前 评论
猪猪

刚使用你这种方式通过了,这是怎么导致的呢,开始在tinker环境测试的是够都能通过,这章测试的时候就报错了,还有大佬那个验证规则那,它验证数字那没怎么看懂, 'regex:/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199)\d{8}$/',不太理解老师的意思

4年前 评论

@猪猪 导致的原因可能需要你去看看Laravel源码,看HTTP请求处的代码是怎么处理的,tinker环境测试是没有走请求的,所以那里直接执行的是这段逻辑代码,而实际请求的时候就不一样了。那个数字验证规则是一个正则表达式,你百度一下“正则表达式”就知道了。

4年前 评论
猪猪

谢谢啦,大佬,受教了

4年前 评论

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