Vous devez placer votre validation() et votre remplaçant() dans une classe ensemble, puis passer des données entre eux en utilisant les propriétés de cette classe. C'est la partie simple. Cependant, cette classe doit être un singleton produit par une fabrique car si ce n'est pas le cas, l'appel à validate() et l'appel à replacer() auront chacun leur propre instance et les propriétés seront nouvelles à chaque fois.
Dans App \ Providers \ AppServiceProvider.php, ajoutez quelque chose comme ceci à la méthode boot().
Validator::extend('myRuleName', 'App\Validators\[email protected]');
Validator::replacer('myRuleName', 'App\Validators\[email protected]');
Même fichier AppServiceProvider, dans la méthode register(). Forcez laravel à toujours charger la même instance de votre validateur en en faisant un singleton. C'est la clé pour avoir $ persistant_info.
$this->app->singleton(\App\Validators\MyCustomValidatorClass::class, function(){
return new \App\Validators\MyCustomValidatorClass;
});
Maintenant, créez votre MyCustomValidatorClass.php dans app/validateurs avec ce en elle ...
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
}
}