我確認一個CSV文件的內容與一個自定義驗證,以確保行和單元格都是有效的。當我發現一個錯誤 - 我想要的信息是具體的。有沒有辦法將Validator :: extend()的信息發送到Validator :: replacer()?如何發送從驗證數據::擴展()來驗證::替代品(),使我的消息可以更詳細?
不幸的是我公司紅外不好,所以我沒有會議或Redis的或任何東西。純php/laravel解決方案。
我確認一個CSV文件的內容與一個自定義驗證,以確保行和單元格都是有效的。當我發現一個錯誤 - 我想要的信息是具體的。有沒有辦法將Validator :: extend()的信息發送到Validator :: replacer()?如何發送從驗證數據::擴展()來驗證::替代品(),使我的消息可以更詳細?
不幸的是我公司紅外不好,所以我沒有會議或Redis的或任何東西。純php/laravel解決方案。
你需要把你的驗證()和你的替代品()中一起上課,然後通過使用類的屬性,它們之間的數據。這是簡單的部分。然而,這個類必須是一個工廠,因爲如果它不是,那麼調用驗證()的調用來替換器(產生單)將各獲得自己的實例和屬性將是新的每次。
在應用軟件\供應商\ AppServiceProvider.php添加像這樣到啓動()方法。
Validator::extend('myRuleName', 'App\Validators\[email protected]');
Validator::replacer('myRuleName', 'App\Validators\[email protected]');
相同的AppServiceProvider文件,在register()方法中。強制laravel始終通過將其設置爲單例加載驗證程序的相同實例。這是擁有$ persistant_info的關鍵。
$this->app->singleton(\App\Validators\MyCustomValidatorClass::class, function(){
return new \App\Validators\MyCustomValidatorClass;
});
現在創建應用程序的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
}
}