php - 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',
任何帮助,将不胜感激。
解决方案
推荐阅读
- react-native - 在 React Native 中使用 useState AND map() 刷新容器/屏幕
- r - ggplot2:有条件地改变线型和颜色
- flutter - 如何通过 onTap() 从 ListView.Builder 中删除项目{}
- java - HttpSession setMaxInactiveInterval 不完全工作时间已设置
- django - 我的 Django 应用程序中的相关名称问题
- android - Android Firebase 从多个节点检索数据作为列表
- python - 无法使用 python 连接器将数据插入 maria db
- r - sparklyr 使用 stringr 改变行为
- java - 如何在 spigot 1.16.4 中获取玩家的 ping
- javascript - 如何在 React 中使用来自您的 passportjs 策略的访问消息