到目前为止,我正在使用(并且喜欢)Laravel 5表单请求验证。但现在我一直在尝试验证相关的模型。
假设我有一个Car
车型,它有很多Wheel
车型,我想验证一辆新车。在CarController@store
方法中,我使用以下内容来验证汽车,但这当然不会验证车轮。
public function store(StoreCarRequest $request)
{
// Create the car
}
需要做些什么来验证Car
的Wheel
?这可以通过表单请求验证来完成吗?
编辑
我越来越近了。剩下的问题是,我需要遍历存储在数组中的轮子(因为HTML输入名称例如为wheels[0][color]
),但验证器正在搜索color
字段,而不是wheels[0][color]
。
public function store(StoreCarRequest $r)
{
// Validate the wheels
foreach ($r->input('wheels') as $wheel)
{
// TODO: use $wheel somewhere?
$snr = new StoreWheelRequest;
$this->validate($r, $snr->rules()); // Validation fails: 'color' field is required
}
// Validation passed, create the car (and the wheels)
}
StoreCarRequest.php
public function rules()
{
return [
'engine' => 'required',
'seats' => 'required',
];
}
StoreWheelRequest.php
public function rules()
{
return [
'color' => 'required',
];
}
HTML表单
<form method="POST" action="...">
<input type="text" name="engine">
<input type="text" name="seats">
<input type="text" name="wheels[0][color]">
<input type="text" name="wheels[1][color]">
<input type="text" name="wheels[2][color]">
<input type="text" name="wheels[3][color]">
<input type="submit" value="Create">
</form>
经过更多的谷歌搜索,我偶然发现了以下文章:http://ericlbarnes.com/laravel-array-validation/
它可以归结为通过迭代输入数组在rules()
方法内部动态添加规则。
您可以使用点表示法来验证嵌套数组:
public function rules()
{
return [
'engine' => 'required',
'seats' => 'required',
'wheel.color' => 'required',
];
}