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

时间:2017-03-20 14:23:11

标签: php validation laravel-5.4 backpack-for-laravel

我无法验证背包中的图像尺寸。

在我的背包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这样的测试用例文件的维度。

我的理论是,验证者正在寻找一个实际的文件'要在帖子中传递的字段,但是elFinder正在传递上传文件的路径。

有关如何使用路径处理Laravel图像尺寸验证的任何想法?

1 个答案:

答案 0 :(得分:0)

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

创建自定义验证类型

app/Providers/AppServiceProvider.php

包括Validator类:

use Illuminate\Support\Facades\Validator;

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

    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作为验证类型,并将宽度/高度约束作为参数传递:

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