Я заметил, что в 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',
Любая помощь будет оценена по достоинству.
Сеанс инициализируется в момент, когда функция add() в вашем контроллере, что означает, что любые изменения сеанса в этой функции не будут доступны в представлении, пока вы не обновитесь (что вы и испытываете). Я ничего не знаю об этом, кроме как переместить логику сеанса в промежуточное программное обеспечение или использовать альтернативный метод (например, файлы cookie или переданные переменные из контроллера в представление).
@BigScaryDuck, это именно то, что я ожидал. Я надеялся, что есть еще один способ запустить промежуточное ПО перед возвращением представления.






Спасибо за совет. Я попробовал это, и это не сработало.