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',
我无法验证 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',