使用FormRequest
,如何将一个字段的规则依赖于另一个字段的值。我知道我可以使用request()
助手来获取如下数据,但是它将在我的测试中失败。
return [
'deposit' => 'sometimes|int|min:100|max:' . request->get('price) * 0.15,
'price' => 'required|int|min:1000',
];
我已经深入研究了类FormRequest
的源代码,那里有一个名为`validationData()的函数。但是,这会在我的测试中返回一个空数组。
这就是我测试FormRequest
的方式:
$request = new InvoiceRequest;
$validator = \Validator::make($data, $request->rules());
$results = $validator->errors()->has($key);
由于request->get('price)
始终为“ null”,因此在我的测试中,存款字段的最大值为0,而在控制器中,它将得到应有的价格* 0.15。
在测试中有没有办法做到这一点?
答案 0 :(得分:0)
现在,我的解决方案是像这样通过rules()
方法传递其他数据:
public function rules($price = null)
{
$price = request()->get('price') ?? (int)$price;
return [
'deposit' => 'sometimes|int|min:100|max:' . round($price * 0.15),
'price' => 'required|int|min:1000',
];
}
在测试中,我只用价格叫rules()
。此变通办法不是完美的,但可以解决问题。我进行了其他测试,以确保使用request()->get('price')
时的情况也可行。