【问题标题】:laravel validate conditional image fieldlaravel 验证条件图像字段
【发布时间】:2019-01-13 10:40:32
【问题描述】:

我有一个必填字段,可以是 2 值类型:字符串(路径)和图像文件

如何为此编写验证规则?

如果值是字符串检查文件是否存在,如果是文件必须是图像

谢谢

【问题讨论】:

    标签: laravel validation


    【解决方案1】:

    也许有更简单的方法可以做到这一点。但是,我认为这样的自定义规则应该起作用。

    $validator = Validator::make($request->all(), [
        'image' => [
            'required',
            function ($attribute, $value, $fail) {
                if(is_file($value)) {
                    if (true !== mb_strpos($value->getMimeType(), "image")) {
                        return $fail($attribute.' is invalid.'); 
                    }
                }
                if (is_string($value)) {
                    if(! file_exists($value)) {
                        return $fail($attribute.' is invalid.'); 
                    }
                }
            },
        ],
    ]);
    

    【讨论】:

    • 谢谢,但我对图像文件有一些规则,例如尺寸、minWidth 和......跨度>
    【解决方案2】:

    我通过FormRequest找到了我的答案

    MyTestFormRequest

    <?php
    use Illuminate\Foundation\Http\FormRequest;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    
    class MyTestFormRequest extends FormRequest
    {
        public function rules()
        {
            $rules = [
                "image" => ['required']
            ];
            if(is_string($this->image)) {
                $rules['image'][] = new FileExistsRule;
            } else if($this->image instanceof UploadedFile) {
                $rules['image'][] = 'image';
                $rules['image'][] = 'dimensions:ratio=1/1';
            }
    
            return $rules;
        }
    }
    

    FileExistsRule

    <?php
    
    use Illuminate\Contracts\Validation\Rule;
    
    class FileExistsRule implements Rule
    {
        public function passes($attribute, $value)
        {
            return file_exists(public_path($value));
        }
    
        public function message()
        {
            return 'The file not exists';
        }
    }
    

    【讨论】:

    • 好一个。谢谢:)
    猜你喜欢
    • 2017-06-28
    • 2022-01-22
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多