Mettre à jour nos utilisateurs avec Eloquent

Dans ce tutoriel nous allons voir comment mettre à jour nos utilisateurs avec Eloquent en créant un formulaire de modification de mot de passe.

Ajouter le formulaire

Dans ressources/views/mon-compte.blade.php je vais créer un nouveau formulaire.

<form class="section" action="/modification-mot-de-passe" method="post">
    {{ csrf_field() }}

    <div class="field">
        <label class="label">Nouveau mot de passe</label>
        <div class="control">
            <input class="input" type="password" name="password">
        </div>
        @if($errors->has('password'))
            <p class="help is-danger">{{ $errors->first('password') }}</p>
        @endif
    </div>

    <div class="field">
        <label class="label">Mot de passe (confirmation)</label>
        <div class="control">
            <input class="input" type="password" name="password_confirmation">
        </div>
        @if($errors->has('password_confirmation'))
            <p class="help is-danger">{{ $errors->first('password_confirmation') }}</p>
        @endif
    </div>

    <div class="field">
        <div class="control">
            <button class="button is-link" type="submit">Modifier mon mot de passe</button>
        </div>
    </div>
</form>

Création de la route et du contrôleur

Dans routes/web.php :

Route::post('/modification-mot-de-passe', 'CompteController@modificationMotDePasse');

Dans app/Http/Controllers/CompteController.php nous allons ajouter une nouvelle fonction, où nous devons tout d'abord vérifier que la personne est bien connectée, puis que les données envoyées via le formulaire sont correctes.

public function modificationMotDePasse()
{
    if (auth()->guest()) {
        flash("Vous devez être connecté pour voir cette page.")->error();

        return redirect('/connexion');
    }

    request()->validate([
        'password' => ['required', 'confirmed', 'min:8'],
        'password_confirmation' => ['required'],
    ]);

    // À faire : modifier l'utilisateur
}

Modifier l'utilisateur authentifié

Pour récupérer l'utilisateur authentifié, nous pouvons utiliser la fonction auth()->user().

$utilisateur = auth()->user();

Nous pouvons ensuite le modifier et le sauvegardé comme vu dans un tutoriel précédent :

$utilisateur->mot_de_passe = bcrypt(request('password'));
$utilisateur->save();

Eloquent sait faire une requête de type UPDATE à la place d'un INSERT lorsque le modèle existe déjà.

Nous pouvons également utiliser comme raccourci la méthode update() :

auth()->user()->update([
    'mot_de_passe' => bcrypt(request('password')),
]);

Rediriger l'utilisateur

Enfin, nous pouvons rediriger l'utilisateur vers la page /mon-compte avec un message :

flash("Votre mot de passe a bien été mis à jour.")->success();

return redirect('/mon-compte');