public function store() { $this->validate(request(),[ // Third try âusernameâ => ârequired|string|regex:/\w*$/|max:255|unique:usersâ, // Second try âusernameâ => ârequired|string|regex:/^[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)*$/|max:255|unique:usersâ, // First try âusernameâ => ârequired|string|max:255â, ]); } The username field was working well with numbers included (at first try) but then I forgot to include âunique:usersâ, then the form started rejecting it (redirects back with username field underlined with wriggle red line). Plus I have used laravelâs âalpha_dashâ several times but keeps rejecting the input. My aim is mixture of letters, numbers, underscores and dashes.Some please help me make this right. Thanks
3 Réponses :
Il vous manque des paramètres. Il doit être unique:table,column,except,primarykeyname
Les deux derniers paramètres sont facultatifs. Dans votre cas, votre validation pour le stockage d'un utilisateur devrait ressembler à ceci:
'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->userId.',userId',
De cette façon, vous dites qu'il ne devrait pas y avoir un utilisateur avec le même nom d'utilisateur dans la base de données .
Cependant, lorsque vous souhaitez mettre à jour un utilisateur, vous devez ajouter l'identifiant de l'utilisateur comme troisième paramètre afin que la validation du nom d'utilisateur unique ignore l'utilisateur que vous essayez de mettre à jour.
'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->id,
Si votre clé primaire n'est pas nommée id, vous ajoutez son nom comme quatrième paramètre:
'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username',
Merci beaucoup @IGP. J'ai mis en œuvre votre approche, mais j'obtiens toujours le même résultat. J'ai également effacé l'historique et les cookies du navigateur. Toujours le même résultat. C’est étrange parce que je ne comprenais pas du tout cela. J'ai en fait enregistré de nombreux utilisateurs, mais j'ai dû migrer à nouveau pour faire des tests. Je ne sais pas quoi faire d’autre maintenant.
Lors de l'utilisation du modèle regex
, il peut être nécessaire de spécifier des règles dans un tableau au lieu d'utiliser des délimiteurs de tube , en particulier si l'expression régulière contient un tube caractère:
public function store(Request $request) { $validatedData = $request->validate([ 'username' => array( 'required', 'unique:users,username', 'max:255', 'regex:/\w*$/' ) ]); }
protected function validator(array $data) { return Validator::make($data, [ 'username' => ['required', 'string', 'max:255'], ]); }
obtenez-vous une erreur de validation unique ou autre chose?