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

Любая помощь будет оценена по достоинству.

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

Dom DaFonte 14.06.2018 20:06

Сеанс инициализируется в момент, когда функция add() в вашем контроллере, что означает, что любые изменения сеанса в этой функции не будут доступны в представлении, пока вы не обновитесь (что вы и испытываете). Я ничего не знаю об этом, кроме как переместить логику сеанса в промежуточное программное обеспечение или использовать альтернативный метод (например, файлы cookie или переданные переменные из контроллера в представление).

BigScaryDuck 14.06.2018 20:20

@BigScaryDuck, это именно то, что я ожидал. Я надеялся, что есть еще один способ запустить промежуточное ПО перед возвращением представления.

Dom DaFonte 14.06.2018 20:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
183
0

Другие вопросы по теме