2017-05-26 37 views
0

我確認一個CSV文件的內容與一個自定義驗證,以確保行和單元格都是有效的。當我發現一個錯誤 - 我想要的信息是具體的。有沒有辦法將Validator :: extend()的信息發送到Validator :: replacer()?如何發送從驗證數據::擴展()來驗證::替代品(),使我的消息可以更詳細?

不幸的是我公司紅外不好,所以我沒有會議或Redis的或任何東西。純php/laravel解決方案。

回答

0

你需要把你的驗證()和你的替代品()中一起上課,然後通過使用類的屬性,它們之間的數據。這是簡單的部分。然而,這個類必須是一個工廠,因爲如果它不是,那麼調用驗證()的調用來替換器(產生單)將各獲得自己的實例和屬性將是新的每次。

在應用軟件\供應商\ 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 
} 

}