我在我的 Laravel 应用程序中创建了一组自定义验证规则。我首先在目录中创建了一个validators.php
文件App\Http
:
/**
* Require a certain number of parameters to be present.
*
* @param int $count
* @param array $parameters
* @param string $rule
* @return void
* @throws \InvalidArgumentException
*/
function requireParameterCount($count, $parameters, $rule) {
if (count($parameters) < $count):
throw new InvalidArgumentException("Validation rule $rule requires at least $count parameters.");
endif;
}
/**
* Validate the width of an image is less than the maximum value.
*
* @param string $attribute
* @param mixed $value
* @param array $parameters
* @return bool
*/
$validator->extend('image_width_max', function ($attribute, $value, $parameters) {
requireParameterCount(1, $parameters, 'image_width_max');
list($width, $height) = getimagesize($value);
if ($width >= $parameters[0]):
return false;
endif;
return true;
});
然后我在我的AppServiceProvider.php
文件中添加这个(同时也在use Illuminate\Validation\Factory;
这个文件的顶部添加):
public function boot(Factory $validator) {
require_once app_path('Http/validators.php');
}
然后在我的表单请求文件中,我可以调用自定义验证规则,如下所示:
$rules = [
'image' => 'required|image|image_width:50,800',
];
validation.php
然后在位于目录中的 Laravel文件中resources/lang/en
,我将另一个键/值添加到数组中,以在验证返回 false 并且失败时显示错误消息,如下所示:
'image_width' => 'The :attribute width must be between :min and :max pixels.',
一切正常,它会正确检查图像,如果失败则显示错误消息,但我不确定如何替换:min
并:max
使用表单请求文件中声明的值(50,800),以相同的方式:attribute
替换为表单字段姓名。所以目前它显示:
The image width must be between :min and :max pixels.
而我希望它像这样显示
The image width must be between 50 and 800 pixels.
我replace*
在主Validator.php
文件中看到了一些函数(vendor/laravel/framework/src/Illumiate/Validation/)
,但我似乎不太明白如何让它与我自己的自定义验证规则一起工作。