web-dev-qa-db-fra.com

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

Dans new Laravel je ne peux pas obtenir de session dans le constructeur. Pourquoi? 

public function __construct()
{
    dd(Session::all()); //this is empty array
}

puis en dessous 

public function index()
{
    dd(Session::all()); //here works
}

Dans le vieux laravel, je me souviens qu'il n'y avait pas ce problème. quelque chose a changé?

9
gogagubi

Vous ne pouvez pas le faire par défaut avec Laravel 5.3. Mais lorsque vous éditez vous Kernel.php et que vous changez protected $middleware = []; par ce qui suit, cela fonctionne.

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

J'espère que ça marche!

24
Robin Dirksen

Dans Laravel 5.3, la fonctionnalité relative aux sessions ne fonctionnera pas dans un constructeur de contrôleur , vous devez donc déplacer toute la logique associée aux sessions vers des méthodes.

5
Alexey Mezenin

Aucune autre solution n’a été trouvée pour cela . Mais vous pouvez toujours y accéder en utilisant Middleware dans le constructeur.

Alors, voici un autre hack

public function __construct(){
    //No session access from constructor work arround
    $this->middleware(function ($request, $next){
        $user_id = session('user_id');
        return $next($request);
    });

}
4
Samy Massoud
 *This one solved mine problem to use session in constructor* 
   $this->middleware(function ($request, $next) {
        if (!session('records_per_page')) {
            session(['records_per_page' => 20]);
        }

        // update rows per page
        if (!empty(\Request::get('records_per_page')) && in_array(\Request::get('records_per_page'), [20, 50, 80, 100])) {
            session(['records_per_page' => \Request::get('records_per_page')]);
        }
        return $next($request);
    });
0
Muhammad Luqman