Laravel请求验证

时间:2017-06-19 01:12:59

标签: php laravel laravel-5.4 laravel-validation laravel-request

我希望你们能帮帮我。

我有以下形式输入这些文件:

Select images: <input type="file" name="images[][image]" multiple>
Select videos: <input type="file" name="videos[][video]" multiple>

我的目标是强制用户在没有引入视频的情况下上传图片。可能性:

  • 至少一张图片
  • 至少一个视频
  • 图像的任意组合 视频

我想避免的事情:

  • 没有图片,没有视频

但我对我需要在控制器中使用的验证感到困惑。这就是我现在所拥有的:

$this->validate($request, [
    'images' => 'required_without_all:videos.*.video',
    'images.*.image' => 'image',
    'videos.*.video' => 'mimetypes:video/avi,video/mpeg,video/quicktime,video/mp4'
]);

但它不起作用。我也试过(没有成功):

$this->validate($request, [
    'images.*.image' => 'image|required_without_all:videos.*.video',
    'videos.*.video' => 'mimetypes:video/avi,video/mpeg,video/quicktime,video/mp4'
]);

如何使用Laravel验证实现我想要的效果?

非常感谢您的进步。

2 个答案:

答案 0 :(得分:0)

您有2维输入数组。 required_without_all是一个字段存在的验证规则,当所有其他字段都不存在时。在您的情况下,您有两个输入字段,每个字段都有多个文件上载。

因此,您需要做的是使用required_without验证切换案例。试试这个,可以帮助你。

$this->validate($request,[
    'images.*.*' => 'required_without:videos.*.*',
    'videos.*.*' => 'required_without:images.*.*',
]);

这将在没有上传图像时检查图像的存在,同样地,在没有上传图像时将检查视频是否存在。

答案 1 :(得分:0)

我最终这样做是为了解决这个问题:

$this->validate($request, [
    'images' => 'required_without_all:videos',
    'images.*.image' => 'image',
    'videos.*.video' => 'mimetypes:video/avi,video/mpeg,video/quicktime,video/mp4'
]);