使用Laravel 5 Form Request验证相关模型


Use Laravel 5 Form Request validation with related models

到目前为止,我正在使用(并且喜欢)Laravel 5表单请求验证。但现在我一直在尝试验证相关的模型。

假设我有一个Car车型,它有很多Wheel车型,我想验证一辆新车。在CarController@store方法中,我使用以下内容来验证汽车,但这当然不会验证车轮。

public function store(StoreCarRequest $request)
{
   // Create the car
}

需要做些什么来验证CarWheel?这可以通过表单请求验证来完成吗?

编辑

我越来越近了。剩下的问题是,我需要遍历存储在数组中的轮子(因为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',
    ];
}