3 votes

\Request::getSession() retourne NULL dans le constructeur du contrôleur

Je veux obtenir l'identifiant de session de l'utilisateur à chaque fois qu'une page est chargée, donc j'utilise \Request::getSession()->getId() dans le constructeur du contrôleur, mais j'obtiens cette erreur

Appel à une fonction getId() sur null

Si j'utilise le même code dans l'un des méthodes de route, ça fonctionne.

Comment puis-je résoudre ce problème?

0voto

Essayez d'utiliser Illuminate\Support\Facades\Auth; Auth::getSession()->getId();

0voto

N Mahurin Points 920

Il s'agit de la fonctionnalité par défaut de Laravel. Les données de session ne sont plus disponibles dans le constructeur. Voir :

laravel - Impossible d'obtenir la session dans le constructeur du contrôleur

0voto

Muhammad Shareyar Points 507

Le mot de Taylor à ce sujet :

Il est très mal vu d'utiliser la session ou l'authentification dans votre constructeur car aucune requête n'a encore eu lieu et la session et l'authentification sont INTRINSEQUEMENT liées à une requête HTTP. Vous devriez recevoir cette requête dans une méthode de contrôleur réelle que vous pouvez appeler plusieurs fois avec différentes requêtes différentes. En forçant votre contrôleur à résoudre les informations de session ou d'authentification dans le constructeur, vous forcez maintenant l'ensemble de votre contrôleur à ignorer la requête entrante réelle, ce qui peut causer des problèmes significatifs lors des tests, etc.

0voto

Savvy Sage Points 177

Cela a fonctionné pour moi:

public function __construct()
{
    // Pas d'accès à la session depuis le constructeur, contournement
    $this->middleware(function ($request, $next) {
        \Request::getSession()->getId();
        return $next($request);
    });
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X