Symfony : Redirect to referer after login

Tout d’abord bien lire la documentation sur ce sujet comme toujours http://symfony.com/doc/current/security/form_login.html
Ensuite si ça ne fonctionne toujours pas je vous montre ce que j’ai du faire.

1 – Ajouter use_referer: true

Dans le fichier app\conf\security.yml, au niveau du paramétrage de l’authentification, ajouter use_referer: true

security.yml
firewalls:
        ...
        main:
            pattern: ^/
            simple_form:
                ...
                use_referer: true 

2 – Ajouter _target_path

Dans votre formulaire de login, ajouter un champ caché _targer_path qui reprendra la valeur du referer.

Et c’est là que je me plantai et je ne comprenais pas pourquoi mon referer était null…
En fait, comme d’habitude, c’était tout bête !

La valeur doit reprendre le chemin exact : _security + provider (ici main) + target_path

login.html.twig
<form action="{{ path('fos_user_security_check') }}" method="post">
                <input type="hidden" name="_target_path" value="{{ app.session.get('_security.main.target_path') }}" />

                <div class="title">Login</div>
                <div>
                    <div class="title">Email*</div>
                    <div class="field"><input type="email" name="_username" value="{{ last_username }}" /></div>
                </div>
                <div>
                    <div class="password">mot de passe</div>
                    <div class="field"><input type="password" name="_password" value="" /></div>
                </div>
                <div>
                    <input type="submit" name="" value="Valider" class="btn" />
                </div>
            </form>

3 – Récupérer le referer

Get the REFERER !!!
$refererUrl = $request->getSession()->get('_security.main.target_path');

Et voilà si ça ne fonctionne pas, cherchez encore, c’est tout simple 🙂

Sinon il y a aussi...