Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Laravel Framework version 5.2.5
Вызываю из котроллера:
public function postAdd() {
session()->flash('status', 'default');
return redirect()->route('main', ['save' => 'ok']);;
}
Не работает flash в шаблоне.
А если тоже самое из роута:
Route::get('/', ['as' => 'main', function(){
session()->flash('status', 'default');
return view('index');
}]);
То Flash успешно передается в шаблон.
Не в сети
Что ты ожидаешь увидеть при редиректе?
Не в сети
Хочу увидеть session status в шаблона index. А передается только параметр save
Не в сети
А Вы как получаете статус - session()->get('status')? Это же не будет просто $status, как остальные переменные
Еще учитывайте, что flash данные хранятся ровно ОДИН запрос. Если сделать 2 редиректа - то уже не будет, к примеру.
Не в сети
А Вы как получаете статус - session()->get('status')? Это же не будет просто $status, как остальные переменные
Еще учитывайте, что flash данные хранятся ровно ОДИН запрос. Если сделать 2 редиректа - то уже не будет, к примеру.
Пробую так
public function postAdd() {
session()->flash('status', 'default');
return redirect()->route('main');;
}
а в шаблоне main
Получаю как в документации
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
Не в сети
Еще учитывайте, что flash данные хранятся ровно ОДИН запрос. Если сделать 2 редиректа - то уже не будет, к примеру.
Так я делаю один редирект из контроллера с переменным session в роуте который выводит шаблон?
Тогда получается передавать session можно только напрямую из роута?
Не в сети
corski
Покажи, что у тебя во view - где ты status пытаешься получить
Попробуй
return redirect()->route('main', ['save' => 'ok'])->with('status', 'default');
Не в сети
Хотя по идее redirect->with тоже самое
/**
* Flash a piece of data to the session.
*
* @param string|array $key
* @param mixed $value
* @return \Illuminate\Http\RedirectResponse
*/
public function with($key, $value = null)
{
$key = is_array($key) ? $key : [$key => $value];
foreach ($key as $k => $v) {
$this->session->flash($k, $v);
}
return $this;
}
Сессии у тебя работают нормально вообще? Может не сохраняются
группа мидлваре web подключена? покажи routes.php
Не в сети
Route::any('/', ['as' => 'main', function(){
//session('status');
return view('index');
}]);
//Route::get('/akp', 'AkpController@index');
Route::controller('/akp', 'AkpController');
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/
Route::group(['middleware' => ['web']], function () {
//
});
Не в сети
Прямо смежная тема )
так сделай
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/Route::group(['middleware' => ['web']], function () {
Route::any('/', ['as' => 'main', function(){
//session('status');
return view('index');
}]);Route::controller('/akp', 'AkpController');
});
Подробнее например здесь
https://mattstauffer.co/blog/middleware … s-from-5.1
Не в сети
Делаю
Routes
Route::controller('/akp', 'AkpController');
Route::group(['middleware' => ['web']], function () {
Route::any('/', ['as' => 'main', function() {
//session()->flash('status', 'default');
return view('index');
}]);
});
index
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
AkpController
session()->flash('status', 'default');
return redirect()->route('main')->with('status', 'default');
И всё равно флэш при редиректе не передается. Зато если раскоментить передачу флэш из роута, проблем нет.
Так же отлично передается аргумент с помощь.
return redirect()->route('main', ['status' => 1]);
Не в сети
Подскажите, каким способом тогда лучше сделать?
Мне нужно сделать редирект из котроллера на '/' с сообщение об удачном действие.
Не в сети
Делаю
RoutesRoute::controller('/akp', 'AkpController'); Route::group(['middleware' => ['web']], function () { Route::any('/', ['as' => 'main', function() { //session()->flash('status', 'default'); return view('index'); }]); });
Ты вынес за пределы группы с web мидлваре, зачем?
я же показал выше как надо
Не в сети
если поместить Route::controller('/akp', 'AkpController'); в Route::group(['middleware' => ['web']], function () {
то получаю
TokenMismatchException in VerifyCsrfToken.php line 67:
Не в сети
Проблема решилась, путь отказа от Route::controller
С версии laravel 5.1 он устарел.
Не в сети
Он пока работает, от него решено в будущем отказаться из-за ряда минусов неявного задания маршрутов
Не в сети
Страницы 1