如何将数据从 Validator::extend() 发送到 Validator::replacer() 以便我的消息更详细?
How do I send a data from Validator::extend() to Validator::replacer() so that my message can be more detailed?
我正在使用自定义验证器验证 csv 的内容,以确保行和单元格都有效。当我发现错误时——我希望消息是具体的。有没有办法将信息从 Validator::extend() 发送到 Validator::replacer() ?
不幸的是我的公司基础设施不好,所以我没有会话或 redis 或任何东西。纯php/laravel溶液。
您需要将 validation() 和 replacer() 放在 class 中,然后使用 class 的属性在它们之间传递数据。这是简单的部分。但是,class 必须是工厂生产的单例,因为如果不是,则对 validate() 的调用和对 replacer() 的调用将各自获得自己的实例,并且属性将是新的时间.
在 App\Providers\AppServiceProvider.php 中将类似的内容添加到 boot() 方法中。
Validator::extend('myRuleName', 'App\Validators\MyCustomValidatorClass@validate');
Validator::replacer('myRuleName', 'App\Validators\MyCustomValidatorClass@message');
相同的 AppServiceProvider 文件,在 register() 方法中。强制 laravel 始终加载验证器的同一个实例,方法是将其设为单例。这是获得 $persistant_info.
的关键
$this->app->singleton(\App\Validators\MyCustomValidatorClass::class, function(){
return new \App\Validators\MyCustomValidatorClass;
});
现在用这个在 app/Validators 中创建你的 MyCustomValidatorClass.php...
namespace App\Validators;
class MyCustomValidatorClass{
private $persistant_info = 'Foo';
public function validate($attribute, $value, $parameters, $validator){
$this->persistant_info = 'Bar';
return false;//normal true/false validation of $value
}
public function message($message, $attribute, $rule, $parameters){
return $this->persistant_info; //returns Bar
}
}
我正在使用自定义验证器验证 csv 的内容,以确保行和单元格都有效。当我发现错误时——我希望消息是具体的。有没有办法将信息从 Validator::extend() 发送到 Validator::replacer() ?
不幸的是我的公司基础设施不好,所以我没有会话或 redis 或任何东西。纯php/laravel溶液。
您需要将 validation() 和 replacer() 放在 class 中,然后使用 class 的属性在它们之间传递数据。这是简单的部分。但是,class 必须是工厂生产的单例,因为如果不是,则对 validate() 的调用和对 replacer() 的调用将各自获得自己的实例,并且属性将是新的时间.
在 App\Providers\AppServiceProvider.php 中将类似的内容添加到 boot() 方法中。
Validator::extend('myRuleName', 'App\Validators\MyCustomValidatorClass@validate');
Validator::replacer('myRuleName', 'App\Validators\MyCustomValidatorClass@message');
相同的 AppServiceProvider 文件,在 register() 方法中。强制 laravel 始终加载验证器的同一个实例,方法是将其设为单例。这是获得 $persistant_info.
的关键$this->app->singleton(\App\Validators\MyCustomValidatorClass::class, function(){
return new \App\Validators\MyCustomValidatorClass;
});
现在用这个在 app/Validators 中创建你的 MyCustomValidatorClass.php...
namespace App\Validators;
class MyCustomValidatorClass{
private $persistant_info = 'Foo';
public function validate($attribute, $value, $parameters, $validator){
$this->persistant_info = 'Bar';
return false;//normal true/false validation of $value
}
public function message($message, $attribute, $rule, $parameters){
return $this->persistant_info; //returns Bar
}
}