Salut Tous le monde,,

Voila je rencontre un petit problème avec la fonction validator de Laravel. J'ai un peux cherché mais je ne trouve pas, ou ne comprends pas, de solutions

Ce que je fais

Je souhaites utiliser le validator de Laravel pour valider mon formulaire d'enregistrement. Je précise qu'a part la donnée ipadresse, tout lée reste est sur un laravel clean. Voici le Validator :

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'ipadresse' => 'required|string|ipadresse|unique:users',
        ]);
    }

Et voici le Formulaire :

<input type="hidden" name="ipadresse" value="{{ $_SERVER['REMOTE_ADDR'] }}">

                                @if ($errors->has('ipadresse'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('ipadresse') }}</strong>
                                    </span>
                                @endif

Et pour finir l'erreur :

 BadMethodCallException
Method Illuminate\Validation\Validator::validateIpadresse does not exist.

5 réponses


Shark
Auteur
Réponse acceptée

Punaise après 50 essais j'ai trouvé :)

'ipadresse' => 'required|string|ipadresse|unique:users',

J'ai rajouter ipadresse après le string et effectivement il n'existe pas ....

'ipadresse' => 'required|string|unique:users',
Lartak
Réponse acceptée

Dans ce cas là, au lieu d'intégrer la valeur dans le formulaire, pourquoi est-ce que tu ne fais pas la vérification directement après la soumission du formulaire ?
Par exemple, une fois le formulaire soumis et qu'il a été validé, tu vérifies qu'aucun utilisateur n'existe déja dans la base de données avec cette IP, si ce n'est pas le cas tu lui retourne une notification pour le prévenir, dans le cas contraire tu fais la sauvegarde au niveau de la base de données.
Mais tu ne dois en aucun cas imposer une validation à l'utilisateur pour des données pour lesqu'elles il n'a aucun contrôle au niveau du formulaire.
Pour résumer, tu commences par supprimer ce champ un niveau du formulaire et au niveau de la validation, ensuite :

  • Formulaire soumis
    • Validation Ok ?
      • Oui, Vérification en base de données pour l'adresse IP
        • L'adresse IP n'existe pas encore, sauvegarde des données
        • L'adresse IP existe déja, notification à l'utilisateur
      • Non, retour des erreurs du formulaire

Conclusion, il ne faut pas confondre validation de données d'un formulaire et vérification en base de données, surtout pour des informations dont l'utilisateur n'a aucun moyen de vérifier, ce n'est pas comme par exemple dans le cas d'une création d'article d'un blog ou le titre de l'article doit être unique et que l'on intègre cette vérification dans la validation d'un formulaire, dans ce cas là l'utilisateur à les moyens de savoir que le titre existe déjà avant même de complétér le formulaire, alors que dans ton cas, l'utilisateur n'a aucun moyen de savoir si l'adresse IP qu'il utilise existe déjà ou non dans la base de données, surtout que te référer à une adresse IP pour l'inscription d'un utilisateur est largement discutable, étant donné que par exemple dans un logement, plusieurs personnes auront la même adresse IP, sans pour autant être la même personne, et de cette manière si l'un d'entre eux c'est déjà inscrit sur le site, un autre ne le pourra pas.

Bonjour.
Tu as en effet trouvé ton erreur, par contre ton approche de l'utilisation de la validation est incorrecte.
La validation pour les formulaires concerne les valeurs qui sont saisient par l'utilisateur, sauf que toi tu veux faire une validation concernant un champ que tu définies toi même, ce qui est totalement illogique envers l'utilisateur, car que comptes tu dires en message d'erreur à l'utilisateur, qu'il à une erreur dans son formulaire car tu as toi même fais une erreur dans la conception du formulaire ?
L'utilisateur ne peut rien corriger s'il n'a pas lui même la possibilité de définir la valeur d'un champ dans le formulaire.
Tu devrais réfléchir à deux fois ou plus à ce qui concerne l'interractivité avec l'utilisateur.
C'est un peu comme si tu lui propose un formulaire d'inscription avec comme champs : email, username, password et que tu lui retourne une erreur en lui disant que la confirmation du mot de passe est incorrecte en sous-entendant qu'il n'a pas correctement recopié son mot de passe dans un champ __password_confirm__, sauf que celui-ci ne lui est pas proposé dans le formulaire, donc comment pourrait'il faire dans ce cas là pour s'inscrire sur le site ?

Shark
Auteur

effectivement ta remarque est bonne, mais il y a ici qu une partie du code. Celui prese t sert a valider que son adresse ip est unique dans la base de donnée. Si ce n est pas le cas, il est redirrigé avec un message i diqua t que l adresse ip est deja présente dans la BDD. Donc je ne veux surtout pas qu il manipule cette info ;)

Shark
Auteur

Je te remercie beaucoup pour le temps que tu as pris à me donner ces explications. Je ne voyais pas du tout ca comme ca. C est vrais que j ai beaucoup de laccunes dans ce domaines et avoir quelqu un qui prend le temps de vous expliquer devient rare. Je vais revoir mon formulaire ainsi que le controller. Encore une fois milles merci