【问题标题】:laravel array validation only one requiredlaravel 数组验证只需要一项
【发布时间】:2016-06-11 17:17:05
【问题描述】:

您好,我有一个图片上传表单

<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。”

请帮忙解决这个问题

【问题讨论】:

    标签: laravel


    【解决方案1】:

    你可以试试:

    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;
    }
    

    【讨论】:

    • 嗨,这与 ad_image.* 相同,我只需要一张图片。如果您传递图像,则无需传递 mimes 规则。谢谢你的回答
    • 添加规则 $rules['ad_image1']=image|required|mimes:png,gif,jpeg,jpg|max:300 或在 foreach if($index==0) $rules ['ad_image'.$index]=image|required|mimes:png,gif,jpeg,jpg|max:300
    • 感谢 sam12,我已经找到了这个变种,但我的东西并不性感,我觉得有更好的解决方案
    【解决方案2】:

    我决定制定自己的自定义验证规则: 此代码在 AppServiceProvider 的 boot 方法中

    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',
    

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 2020-04-30
      • 2019-10-01
      • 2017-06-04
      • 2015-09-22
      • 2019-02-23
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多