laravel数组验证只需要一个

时间:2016-02-28 18:27:00

标签: laravel

您好我有一张图片上传表格



<input type="file" name="ad_image[]">
&#13;
&#13;
&#13;

我只想要一个图像而其他图像是可选的。 这是我的验证规则,不起作用:

'ad_image.*' => 'required|min:1|mimes:png,gif,jpeg,jpg|max:300',

我试过这个:

'ad_image' => 'required|array|min:1|mimes:png,gif,jpeg,jpg|max:300',

也无效,当我上传jpg文件时出现错误&#34;广告图片必须是以下类型的文件:png,gif,jpeg,jpg。&#34;

请帮助解决此问题

2 个答案:

答案 0 :(得分:0)

您可以尝试:

public function rules()
{
    $rules = [
                'ad_image0'=> 'image|required|mimes:png,gif,jpeg,jpg|max:300'
            ];

    $nbr = count($this->input('ad_image')) - 1;
    foreach(range(0, $nbr) as $index) {
        $rules['ad_image.' . $index] ='image|mimes:png,gif,jpeg,jpg|max:300';
    }

    return $rules;
}

答案 1 :(得分:0)

我决定制定自己的自定义验证规则: 此代码位于AppServiceProvider的引导方法

public function boot()
{
    Validator::extend('require_one_of_array', function($attribute, $value, $parameters, $validator) {
        if(!is_array($value)){
            return false;
        }

        foreach ($value as $k => $v){
            if(!empty($v)){
                return true;
            }
        }

        return false;
    });
}

验证消息被手动添加为验证器的第三个参数

$messages = [
        'require_one_of_array' => 'You need to upload at least one pic.',
    ];

这是用来确保至少上传一个图像(这是在规则数组中):

'ad_image' => 'require_one_of_array',
'ad_image.*' => 'mimes:jpeg,bmp,png|max:300',