Nixus

3621 经验值

验证代码:

public function rules()
{
    return [
        'money'   => 'required|min:1',
    ];
}
public function store(NewBonusTaskRequest $request)
{
    dd($request->all());
}

居然可以把请求信息都输出了,而没有返回错误信息

谢谢老师回复!
后来新建了app/Extensions这个目录,在里面重写了Illuminate\Foundation\Http\FormRequest这个类,覆盖了failedValidation方法,终于解决了这个问题。
最大的感觉就是,思路不够开阔,对laravel不熟悉,laravel没有的,或者不适合的地方,自己还想不到通过重写类方法这种途径去解决问题,思维太局限了

在生成的Resource文件的时候,toArray方法中,默认有一行代码:

$data = parent::toArray($request);
foreach($data as $key => &$value) {
     $key = $this->fieldsMap($key);
}
return [
      'code'=>200,
      'data' => $data
];

这行代码,拿到的就是查询结果的数据,而且是可变的

如果需要把每个字段的名字都换成其他的话,可能还需要定义一个方法:

public function fieldsMap($key)
{
    $fields = [
        'mobile'   => 'phone',
        'username' => 'name',
    ];

    return isset($fields[$key]) ? $fields[$key] : $key;
}

或许可以这样实现

老师,请问,加判断是加在哪儿?是Controller还是Resource中?
感觉这个Api Resource有点儿鸡肋,不够灵活

这个问题也是困惑我好久的,现在又回到laravel的这个项目上了,也就又回到了这个问题上
查了很多,都没找到涉及该问题的内容

@JellyBool 老师,上面那个问题解决了,又有个新的问题,就是返回的数据格式的问题:

{
    "message": "The given data was invalid.",
    "errors": {
        "mobile": [
            "请检查手机号码是否正确"
        ],
        "email": [
            "请填写邮箱"
        ]
    }
}

这是验证没通过时,返回的错误信息。怎么改成实际需要格式呢?
一般都会有一个错误码的那种格式
改格式这个,真的是不知道如何用英文搜了

找到了新的解决方案:
发起请求时,在header中加入:X-Requested-With:XMLHttpRequest
如果验证不通过,就会返回json格式的数据,不需要做任何修改

@JellyBool 如果是在API开发中使用表单请求类这种方式来做验证,验证不通过的时候,会直接跳转到首页;
在网上找了一个解决方案:https://laracasts.com/discuss/channels/laravel/form-request-to-validate-in-my-api-rest
Illuminate\Foundation\Http\FormRequest 这个类中加了一个判断,大概是 78 行之后:

if (method_exists($this, 'response')) {
    return $this->response($validator);
}

然后在表单请求类中,加一个response方法

public function response($validator)
{
    return response()->json($validator->errors());
}

直接输出错误信息
这样改了之后有两个困惑,
1、改了框架的代码,以后更新会有影响;
2、返回的错误信息没有加API返回信息的格式,不清楚 表单请求类 中,是否也可以使用API Resource

@JellyBool StoreArticleRequest $request如果在API中这么使用时,验证不过会跳转到首页,这个有没有办法,在验证不过的时候,返回错误信息

有点儿担心切换成本高,不敢下手

之前在这里学习的时候,跟着老师,装了valet,但是没有redis、没有MySQL,要一个一个装
MySQL当时就装好了,但是看了redis的,即使是使用brew install redis来安装,也还要做链接什么的,挺麻烦的,就搜了一下,怎么给valet安装redis,没找到满意的安装方式,结果就发现了这个
https://github.com/weprovide/valet-plus#installation
感觉还挺不错的,该有的全有了,想安装试下