0
votes

Validation du nom d'utilisateur dans laravel

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

1 commentaires

obtenez-vous une erreur de validation unique ou autre chose?


3 Réponses :


2
votes

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',


1 commentaires

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.



1
votes

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*$/'
          )
    ]);
}


0 commentaires

0
votes
 protected function validator(array $data)
    {
        return Validator::make($data, [
            'username' => ['required', 'string', 'max:255'],
        ]);
    }

0 commentaires