Backpack CRUD:如何验证使用 elFinder 上传的图像的尺寸?

Backpack CRUD: How do I validate dimensions of an image uploaded with elFinder?

我无法验证 Backpack 中 laravel 的图像尺寸。

在我的 Backpack CRUD 中,我正在使用 elFinder 添加一个用于上传照片的字段,如下所示:

$addFields = [
    [
        'name' => 'photo',
        'label' => 'Header Photo (1500 x 1000 EXACTLY)',
        'type' => 'browse'
    ]
]

在我的请求中,我使用以下规则来验证图像的大小:

public function rules()
{

    return [
        'photo' => 'dimensions:width=1500,height=1000'
    ];
}

无论我尝试什么维度属性都验证失败。我已经尝试过 max_width 超出测试用例文件尺寸的方法。

我的理论是验证器正在寻找要在 post 中传递的实际 'file' 字段,但 elFinder 传递的是已上传文件的路径。

关于如何使用路径在 Laravel 中处理图像尺寸验证有什么想法吗?

我通过添加自定义验证器方法和 PHP 的原生 getimagesize 函数解决了这个问题,以使用规则提供的路径进行验证。

创建自定义验证类型

app/Providers/AppServiceProvider.php中:

包括验证器 Class:

use Illuminate\Support\Facades\Validator;

AppServiceProvider.php 中的 boot() 函数内部添加:

    Validator::extend('header_image', function($attribute, $value, $parameters, $validator) {

        $path = public_path();
        $photo = "$path/$value";
        list($width,$height) = getimagesize($photo);
        // $parameters[0] = width
        // $parameters[1] = height
        if ($width != $parameters[0] || $height != $parameters[1]) {
            return false;
        }else{
            return true;
        }

    });

现在我可以使用 header_image 作为验证类型并传入 width/height 约束作为参数:

'photo' => 'header_image:1500,1000',