首页 > 解决方案 > Laravel 5.6:session()->push('variable') 直到第二次刷新才到达中间件

问题描述

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

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

中间件: 假设您有一个名为ViewData的中间件,它与视图共享变量。

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

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

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

    return $next($request);

}

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

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

的视图中的引用我的视图将引用此中间件中的变量。

      <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',

任何帮助,将不胜感激。

标签: phplaravellaravel-5

解决方案


推荐阅读