某些字段在使用 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
文件中启动的。