1

我无法在 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 中处理图像尺寸验证的任何想法?

4

1 回答 1

2

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

创建自定义验证类型

app/Providers/AppServiceProvider.php

包括验证器类:

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

于 2017-03-20T20:07:54.487 回答