Modifier les champs d’une requête avant validation sur Laravel 5

Vous avez une table users, et le champ email est unique. Seulement, votre base postgresql est sensible à la casse. Donc, vous vous retrouvez avec un mail test@test.com et le même sous le format test@test.Com.

Du coup, le bon réflexe est d’utiliser les mutators, et d’appliquer un strtolower() sur le champ en question. Mais ce n’est pas une rustine complète. Hé oui, parce que celui qui va indiquer test@test.Com va passer votre règle de validation unique de la requête. Du coup, à l’insertion en base, votre mutator va modifier la valeur. Et c’est là que vous allez croiser le chemin de PDOException.

La solution va être soit de créer une nouvelle règle de validation, qui va faire le job, soit de modifier la valeur de l’input avant l’exécution de la règle de votre objet Request. On va voir la seconde méthode :

En réalité, il suffit simplement de surcharger la méthode all() depuis votre classe (CreateUserRequest par exemple) et d’exécuter la méthode parente pour intercepter les valeurs, et les changer, avant de les retourner :

    public function all()
    {
        $input = parent::all();

        if (isset($input['email'])) {
            $input['email'] = strtolower($input['email']);
        }

        return $input;
    }

Et voilà !

metrogeek

Laisser un commentaire