首页 文章

laravel 数组验证只需要一个

提问于
浏览
0

你好,我有一个图像上传表格

<input type="file" name="ad_image[]">

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

'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 文件时出现错误“广告图片必须是类型为:png,gif,jpeg,jpg 的文件。”

请帮忙解决这个问题

2 回答

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

相关问题