我注意到在Laravel 5.6中,我的会话变量在第二页刷新之前没有传递给我的中间件 . 如果我重定向到页面,会话会在第一次尝试时传递给视图,但在我的实例中,我需要将内容传递给视图 .

有没有人注意到这一点并有解决方案?

Middleware: 假设您有一个名为 ViewData 的中间件,它将变量共享给视图 .

public function handle($request, Closure $next) {

        $setHandle = session('setHandle')[0];

        $account = AccountUser::where('handle', '=', $setHandle)->first();
        view()->share('account', $account);

    return $next($request);

}

Controller: Controller设置setHandle会话变量,然后返回一个视图:

public function add()
{   
    $setHandle = 'abcd'; 
    session()->forget('setHandle');
    session()->push('setHandle', $setHandle);
    return view('account.add');
}

Reference in my View 我的视图将引用此中间件中的变量 .

<a class="navbar-brand brand-logo text-light" href="{!! url('account/'.$account->whatever) !!}">{!! $account->whatever !!}</a>

问题是第一个返回视图与旧的setHandle变量一起返回,当我再次刷新时,它返回带有setHandle变量的新帐户 .

我认为这可能与我的中间件设置位置有关,但我的viewData中间件是在StartSession中间件之后设置的,所以我认为会话会在调用中间件后刷新 .

\Illuminate\Session\Middleware\StartSession::class,
'App\Http\Middleware\ViewData',

任何帮助,将不胜感激 .