2016-06-23 2 views
0

У меня есть контроллер, который имеет функцию переадресации:Laravel 5.2.32: флэш-сеанса не работает с переадресацией

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 

    return Redirect::to('previousroute')->with('data', $data); 
} 

Этот previousroute обрабатывается otherControllerMethod() следующим образом:

public function otherControllerMethod() 
{ 
    $data = Session::get('data'); 

    return $this->makeView($data); 
} 

К сожалению, Laravel забывает данные сеанса. Я делал это много раз раньше, и я никогда не видел, если забудьте данные флэш-памяти сеанса после одной переадресации. Что здесь происходит? Я пробовал как добавлять, так и удалять «сетевое» промежуточное ПО, но ничего не работает. Если кто-нибудь знает, почему это случилось, дайте мне знать.

+0

Я испытал подобную проблему пару раз. Можете ли вы проверить, является ли проблема, что вы получаете новый сеанс для каждого запроса? В моем случае проблема была связана с лаком. Лак не обходил печенье до ngnix, который каждый раз становился новым. В этом случае есть несколько способов: настройка настройки лака или добавление специального заголовка, чтобы заставить лак обходить файлы cookie. Надеюсь, это принесет некоторый свет. – jhmilan

+0

Ни один из показанных вами кодов не устанавливает никаких сеансов или флэш-данных. – patricus

+0

patricus - это на самом деле не так. Переадресация() с использованием метода with() выполняет флеш-данные. См. Https://laravel.com/docs/5.2/responses#redirecting-with-flashed-session-data –

ответ

0

В myControllerMethod вы передаете data obj/var в качестве запроса.

В otherControllerMethod вы запрашиваете данные сеанса, которые не заданы.

Для того, чтобы поместить данные в сессии, вы должны сделать:

Session::put('data','value') 

, а затем она будет доступна с:

Session::get('data'); 
0

Я была такая же проблема раньше. В основном мне нужно было позвонить send при переадресации с использованием Redirect фасад. Таким образом, вы должны изменить ваш myControllerMethod на:

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 
    return Redirect::to('previousroute')->with('data', $data)->send(); 
} 

Как send() функции класса Symfony\Component\HttpFoundation\Response вызывает функцию sendContent() которая отправляет данные при перенаправлении.

Надеюсь, это поможет.

2
use Session; 

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 
    Session::set('data', $data); 
    return Redirect::to('previousroute')->with('data', $data); 
} 

public function otherControllerMethod() 
{ 
    $data = Session::get('data'); 

    return $this->makeView($data); 
} 

Попробуйте вот так. Используйте сеанс и задайте данные в сеансе и получите его там, где хотите.