Nixus

3369 经验值

老师,laravel中有验证数值大小的吗?
我看了一下文档,找到了一个between,设置了between:1,100
结果,在值为0,-1的时候,依然通过了验证

验证代码:

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格式的数据,不需要做任何修改