在Laravel中使用自定义验证规则和替代品时,我真的很难找到任何文档,只会让您获得验证失败的值。
例如,我创建了一个文件存在验证器:
Validator::extend('view_exists', function($field,$value,$parameters)
{
return View::exists($value);
});
Validator::replacer('view_exists', function($message, $attribute, $rule, $parameters)
{
return str_replace(':filename', 'THE ENTERED VALUE', $message);
});
现在,当我创建一个规则:
$rules = array('filename' => 'required|view_exists');
$messages = array('filename.view_exists' => 'Filename \':filename\' does not exist');
当我输入无效路径时,例如safsakjhdsafkljh
,我希望它可以返回
Filename 'safsakjhdsafkljh' does not exist
但replacer
无法访问验证失败的值。我已经尝试输出传递给闭包的所有参数,包括$this
,并且它无处可见:(
在我使用Input::get
(urgh)之前,我错过了一些完全明显的东西吗?
由于
加文
答案 0 :(得分:3)
使用Laravel 5.4,您可以在替换器回调中访问Validator实例,如下所示:
LanguageSelectionTVC
答案 1 :(得分:2)
使用getValue()
课程中的 Validator
方法。为此,请按照以下两个步骤操作:
创建自己的CustomValidator
类,扩展Laravel Illuminate\Validation\Validator
基类:
Validator::resolver(function($translator, $data, $rules, $messages, $attributes)
{
return new CustomValidator($translator, $data, $rules, $messages, $attributes);
});
或服务提供商:
public function boot()
{
$this->app->validator->resolver(function($translator, $data, $rules, $messages, $attributes)
{
return new CustomValidator($translator, $data, $rules, $messages, $attributes);
});
}
使用替换方法在CustomValidator
中创建app/Validation/CustomValidator.php
类:
<?php namespace App\Validation;
use Illuminate\Validation\Validator;
class CustomValidator extends Validator {
/**
* Replace all place-holders for the view_exists rule.
*
* @param string $message
* @param string $attribute
* @param string $rule
* @param array $parameters
* @return string
*/
protected function replaceViewExists($message, $attribute, $rule, $parameters)
{
return str_replace(':value', $this->getValue($attribute), $message);
}
}
答案 2 :(得分:2)
你可以这样做(Laravel 5.2):
Validator::extend('my_custom_validation_rule', function($attribute, $value, $parameters, $validator) {
$validator->addReplacer('my_custom_validation_rule', function ($message, $attribute, $rule, $parameters) use ($value) {
return str_replace(':value', $value, $message);
});
return $value == 'foo';
});
在翻译文件中:
'my_custom_validation_rule' => ':value is not correct value.'
答案 3 :(得分:1)
我怀疑我最初的想法是唯一的方法,但如果有人能提出建议,我会很感激:
我的解决方案是:
Validator::extend('view_exists', function($field,$value,$parameters)
{
return View::exists($value);
});
Validator::replacer('view_exists', function($message, $attribute, $rule, $parameters)
{
return str_replace(':filename', Input::get($attribute), $message);
});
不是最好的,但是嘿,它有效......