【问题标题】:Laravel Request validationLaravel 请求验证
【发布时间】:2017-11-21 02:33:40
【问题描述】:

希望你们能帮帮我。

我在一个表单中输入了这些文件:

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 的验证来实现我想要的?

非常感谢您。

【问题讨论】:

  • 您是否转储请求以确保您正确访问变量?
  • @AlexMac 我做到了。请求中的一切都是正确的。

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


【解决方案1】:

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

所以,您需要做的是使用required_without 验证来切换您的案例。试试这个,可能对你有帮助。

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

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

【讨论】:

  • 它不起作用...即使我没有选择任何图像或视频,请求也通过了验证。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 2017-10-01
    • 2019-12-31
    • 2020-11-06
    • 2020-08-20
    • 2018-09-15
    • 2018-03-23
    • 2015-06-22
    • 2020-07-13
    相关资源
    最近更新 更多