Validation Laravel 5.2验证文件数组

Validation Laravel 5.2验证文件数组,validation,laravel,Validation,Laravel,我有一个包含三个字段的表单:title、body和photo[]。我试图验证它,以便至少有一个项目被填写,但我似乎无法让它工作。如果我上传文件,我仍然会收到标题和正文的错误 public function rules() { return [ 'title' => 'required_without_all:body,photo.*', 'body' => 'required_without_all:title,photo.*',

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

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',
    ];
}

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

这些规则由管道字符
|
分隔,因此,如果要在示例中结合这两个字符,则需要
“photo.*”=>“required”,而不需要所有字符:标题、正文| mimes:jpeg、gif、png、
。我没有看到你用管道来分隔规则,所以我不能确定你是否知道

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

您可以尝试类似的方法(作为记录,我认为您开始使用
required\u而不使用\u all
是正确的,因为这规定了如果缺少所有给定字段,则需要使用):


为什么同一字段有两条规则?请详细说明你想做什么,因为我不太清楚,但在我的回答初稿中做了一些假设是的,谢谢。我的眼睛昏昏欲睡,正在制定我的规则,就像你如何设置消息一样:每条消息一行。我把尺子固定好,用管子把它们分开;这没用。我不确定你所说的
'photo'=>'array'
是什么意思?我想让用户至少填写一个字段。因此,他们必须上传照片,或添加标题,或在正文中添加文字;他们不能提交空表单。
'photo'=>array'
只需检查您的
photo
值是否为数组。因为您正在发送n张照片,每个照片都封装在最顶端的阵列中。因此,第一个验证将是确保您接收到一个数组。我抓起您的代码并将
photo.*
切换到
'photo.*=>'| required|u,不带所有内容:标题、正文| mimes:jpeg、gif、png'
,它可以工作!谢谢
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',
    ];
}