如何在Laravel中验证数组输入?

时间:2018-05-27 09:59:41

标签: php laravel

这是我的代码:

public function store(Request $request)
{
    try {
        $this->validate($request, [
            'activity_licenses' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6144',
        ]);
    } catch (\ValidationException $e) {
        return [false, $e->getMessage()];
    }
    .
    .
    .

实际上activity_licenses是一个数组。这是HTML:

<input type="file" name="activity_licenses[] />
<input type="file" name="activity_licenses[] />

我该如何验证?更重要的是,我怎样才能找到失败的原因(错误信息)?目前$e->getMessage()在失败时为空。

2 个答案:

答案 0 :(得分:0)

尝试:

$input_data = $request->all();

$validator = Validator::make(
    $input_data, [
    'image_file.*' => 'required|mimes:jpg,jpeg,png,bmp|max:20000'
    ],[
        'image_file.*.required' => 'Please upload an image',
        'image_file.*.mimes' => 'Only jpeg,png and bmp images are allowed',
        'image_file.*.max' => 'Sorry! Maximum allowed size for an image is 20MB',
    ]
);

if ($validator->fails()) {
    // Validation error.. 
}

https://stackoverflow.com/a/38327539/3475207

答案 1 :(得分:0)

Laravel doc中描述了数组验证,并使用您的案例,它应该是:

$this->validate($request, [
        'activity_licenses.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6144',
    ])

使用控制器中的$this->validate(),错误消息会自动传递给您的视图,变量$errors会保留它。您应该检查:使用Laravel doc

中的错误消息

一个例子(取自文档):

@if ($errors->any())
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>

@endif

您可能希望通过以这种方式调用验证器manually进行验证:

$validator = Validator::make($request->all(), [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
    }
  

我的建议是你应该阅读文档。