拉拉维尔验证条件图像字段



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

如何为此编写验证规则?

如果值为字符串,请检查file_exist,如果是文件必须是图像

谢谢

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

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

我找到了答案FormRequest

我的测试表单请求

<?php
use IlluminateFoundationHttpFormRequest;
use SymfonyComponentHttpFoundationFileUploadedFile;
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;
    }
}

文件存在规则

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

最新更新