Laravel:FormRequest 与 Request 有何不同



某些字段在使用 FormRequest 时不会发送。在一个项目中,我不得不对可能无限的输入数组使用一些自定义验证:

<input type="file" name="image[1]" />
<input type="file" name="image[2]" />

等。。。

为了验证这些,我创建了一个名为StoreProject的FormRequest:

public function rules()
{
    $rules = [
        'title' => 'required',
    ];
    foreach( $this->request->get( 'image' ) as $key => $val )
    {
        $rules['image.'.$key] = 'image';
    }
    return $rules;
}

在我的控制器功能中,我注意到通过请求发送的内容有所不同。

如果我的控制器看起来像这样:

public function store(StoreProject $request)
{
    dd( $request->all() );
}

请求中不包含任何数组输入。而如果我像这样使用标准请求。

public function store(Request $request)
{
    dd( $request->all() );
}

我的数组输入看起来很好。

有谁知道为什么会这样?或者,如何在使用自定义验证的同时仍可访问这些映像?

您可以使用

* 运算符验证数组:

public function rules()
{    
    return [    
        'title' => 'required',
        'image.*' => 'image',
    ];
}

https://laravel.com/docs/5.5/requests#retrieving-uploaded-files

$request->all()不包含上传的文件输入。您必须使用: $request->file('image')方法或$request->image动态属性。

你的问题有答案。

IlluminateHttpRequest - 可直接使用

IlluminateFoundationHttpFormRequest - 需要使用具有rules()authorize()函数实现的类进行扩展

IlluminateHttpRequest - 是一个单例,您可以通过运行函数request()在任何地方获得它。它是在您的publicindex.php文件中启动的。

最新更新