3
votes

règle de validation des e-mails dans Laravel

Je fais la validation de cette façon.

$rules = [ 
  'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this>get('example_id').',example_id'
];

return $rules;

Cependant, je n'obtiens pas de succès.

L'erreur informe que

l'e-mail existe déjà

Ce que je veux, c'est que si l ' e-mail existe déjà et provient du même utilisateur, je n'ai pas besoin d'indiquer que l'e-mail existe déjà.

Je ne sais pas quel est le problème dans mon code.


4 commentaires

du même utilisateur comment?


où implémentez-vous ce code? dans le contrôleur?


il y a un enregistrement d'utilisateur, lorsque vous ouvrez son enregistrement et envoyez ce même enregistrement si l'e-mail n'est pas échangé, l'e-mail reste lié à cet utilisateur, c'est-à-dire que vous n'avez pas besoin de montrer que cet e-mail déjà est utilisé car il s'agit du même utilisateur.


J'ai créé une demande


5 Réponses :


3
votes

Vous pouvez utiliser

$id = $request->route('user')

L'ID doit être remplacé par le nom de la colonne de clé primaire de la table que vous utilisez pour la vérification unique. Le {$ id} doit être défini avant le tableau $ rules comme:

'email' => "required|email|unique:users,email,{$id},id",


6 commentaires

Corrigez-moi si je me trompe, mais je pense que la dernière valeur (c'est-à-dire id ) n'est pas requise laravel.com/docs/4.2/validation#rule-unique


Les deux derniers seront utilisés pour 'unique sauf $ id de la colonne id' (lors de la mise à jour)


Oui, mais l'avant-dernier ( $ id ) est la spécification de l'identifiant et laravel regardera par défaut la colonne id , donc le dernier n'est pas obligatoire ici


Absolument! Je l'ai inclus parce que le propriétaire de la question a inclus $ this> get ('example_id'). ', Example_id'


Ah oui j'ai raté ça :) nvm alors


'email' => "obligatoire | unique: tab_example, email,". $ this-> route ('id_exampl‌ e'). ", id_example" est correct?



1
votes

Essayez ceci

'email' => Rule::unique('users')->ignore($user->id, 'user_id');

Lire sous la section Forcer une règle unique à ignorer un champ donné


0 commentaires

2
votes

Parfois, vous souhaiterez peut-être ignorer un identifiant donné lors de la vérification unique.

Par exemple, envisagez un écran "Mettre à jour le profil" qui inclut le nom d'utilisateur, l'adresse e-mail et l'emplacement. Bien sûr, vous voudrez vérifier que l'adresse e-mail est unique.

Cependant, si l'utilisateur ne modifie que le champ du nom et non le champ de l'e-mail, vous ne voulez pas qu'une erreur de validation soit générée car l'utilisateur est déjà le propriétaire de l'adresse e-mail.

vous pouvez utiliser comme:

'email' => [
        'required',
         Rule::unique('users')->ignore($user->id),
],


0 commentaires

0
votes

Utilisez simplement

  $rules = [ 
       'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this->route('example_id').',example_id'
   ];

   return $rules;

au lieu de

$this>get('example_id')

Et si vous utilisez la ressource route, utilisez $ this-> route ('utilisateur' ).

$this->route('example_id') 


7 commentaires

J'ai fait ça, mais ça me renvoie quand même le même problème, ça dit que l'email existe déjà ...


quel est votre nom de paramètre? et avez-vous utilisé la route des ressources?


public function rules () {$ rules = ['email' => "obligatoire | unique: tab_example, email,". $ this-> route ('example_i‌ d'). ", example_id"]; return $ rules; }


Je ne parle pas de votre fonction de règles. Je parle de votre itinéraire. pouvez-vous donner votre itinéraire pertinent?


mon problème est d'obtenir l'identifiant de l'utilisateur, je ne sais pas si je me trompe, mais j'ai réalisé cela, je pense que le problème pourrait être avec route (). Mes itinéraires: $ this-> post ('/ admin / médecins / save / {id?}', 'MedicosController @ save') -> nom ('docteurs'); $ this> any ('/ admin / docteurs / {action?} / {id?}', 'MedicosController @ action') -> nom ('médecins');


Votre validation me semble bonne. Si vous mettez à jour votre code comme je l'ai suggéré. Je l'utilise dans mon projet et cela fonctionne très bien. Merci


J'ai résolu le problème. Je viens de recevoir l'identifiant comme ceci: 'med_email' => Rule :: unique ('tab_medicos') -> ignore (request () -> route ('id'), 'med_id'), Merci ami, merci pour l'aide .



1
votes

Essayez par ici

$rules = [ 
        'email'=> ['required', 'email', \Illuminate\Validation\Rule::unique('tab_example', 'email')->whereNot('example_id',$this->get('example_id'))]
    ];


0 commentaires