【问题标题】:Laravel 5.2 Validate File ArrayLaravel 5.2 验证文件数组
【发布时间】:2016-12-29 12:47:21
【问题描述】:

我有一个包含三个字段的表单:titlebodyphoto[]。我正在尝试验证它,以便至少填写一项,但我似乎无法让它工作。如果我上传文件,我仍然会收到 titlebody 的错误。

public function rules()
{
    return [
        'title' => 'required_without_all:body,photo.*',
        'body' => 'required_without_all:title,photo.*',
        'photo.*' => 'required_without_all:title,body',
        'photo.*' => 'mimes:jpeg,gif,png',
    ];
}

更新:乔纳森指出我的规则是错误的。我已经修复了它们,现在正在使用它。它仍然无法正常工作;当我尝试上传照片时,我收到其他字段是必填项的错误消息。

public function rules()
{
    return [
        'title' => 'required_without:body,photo.*',
        'body' => 'required_without:title,photo.*',
        'photo.*' => 'required_without:title,body|mimes:jpeg,gif,png',
    ];
}

【问题讨论】:

  • 为什么同一个字段有两条规则?请详细说明您要做什么,因为我并不完全清楚,但在我的答案的初稿中做出了一些假设

标签: validation laravel


【解决方案1】:

如果您希望确保photo 字段是一个数组,那么您需要'photo' => 'array',然后您可以使用'photo.*' => '' 对数组的子项进行其他验证。

规则由竖线字符| 分隔,因此如果您要在示例中将两者结合起来,则为'photo.*' => 'required_without_all:title,body|mimes:jpeg,gif,png',。我没有看到你使用管道来分隔规则,所以我不能确定你是否意识到这一点。

这可能是您一开始就出错的地方(关联数组中的两个键是相同的)并且某种优先级会影响否定其中一个规则。

您可以尝试这样的事情(为了记录,我认为您在开始使用 required_without_all 时处于正确的轨道上,因为这规定了如果 所有 给定字段都是必需的丢失):

public function rules()
{
    return [
        'title' => 'required_without_all:body,photo',
        'body' => 'required_without_all:title,photo',
        'photo' => 'array',
        'photo.*' => 'required_without_all:title,body|mimes:jpeg,gif,png',
    ];
}

Reference

【讨论】:

  • 好的,谢谢。我睡眼惺忪,正在设置我的规则,就像你设置消息的方式一样:每条消息一行。我修正了规则并用管道将它们分开;它没有帮助。我不确定您所说的'photo' => 'array' 是什么意思?
  • 澄清一下:我希望用户至少填写一个字段。所以他们必须上传照片,或者添加标题,或者在正文中添加文本;他们不能提交空表单。
  • 'photo' => 'array' 只是检查您的 photo 值是否是一个数组。由于您要发送 n 张照片,每张照片都封装在最顶层的数组中。所以第一个验证是确保你收到一个数组。
  • 我获取了您的代码并将photo.* 切换为'photo.*' => '|required_without_all:title,body|mimes:jpeg,gif,png' 并且它有效!谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-08-28
  • 2016-04-28
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2017-02-26
相关资源
最近更新 更多