2017-05-26 3 views
0

Je valide le contenu d'un fichier csv avec un validateur personnalisé pour m'assurer que les lignes et les cellules sont toutes valides. Quand je trouve une erreur - je veux que le message soit spécifique. Existe-t-il un moyen d'envoyer des informations de Validator :: extend() à Validator :: replacer()?Comment envoyer une donnée de Validator :: extend() à Validator :: replacer() pour que mon message soit plus détaillé?

Malheureusement, mon entreprise infra n'est pas bonne, donc je n'ai pas de sessions ou redis ou quoi que ce soit. Solution php/laravel pure.

Répondre

0

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 
} 

}