Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.02.2016 17:55:40

Не работает flash из контроллера на laravel5.2

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 успешно передается в шаблон.

Не в сети

#2 10.02.2016 22:35:55

Re: Не работает flash из контроллера на laravel5.2

Что ты ожидаешь увидеть при редиректе?

Не в сети

#3 11.02.2016 00:55:14

Re: Не работает flash из контроллера на laravel5.2

Хочу увидеть session status в шаблона index. А передается только параметр save

Не в сети

#4 11.02.2016 05:23:05

duster
Откуда: Мельбурн
Сообщений: 148

Re: Не работает flash из контроллера на laravel5.2

А Вы как получаете статус - session()->get('status')? Это же не будет просто $status, как остальные переменные

Еще учитывайте, что flash данные хранятся ровно ОДИН запрос. Если сделать 2 редиректа - то уже не будет, к примеру.

Не в сети

#5 11.02.2016 09:09:17

Re: Не работает flash из контроллера на laravel5.2

duster пишет:

А Вы как получаете статус - 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

Не в сети

#6 11.02.2016 09:21:10

Re: Не работает flash из контроллера на laravel5.2

duster пишет:

Еще учитывайте, что flash данные хранятся ровно ОДИН запрос. Если сделать 2 редиректа - то уже не будет, к примеру.

Так я делаю один редирект из контроллера с переменным session в роуте который выводит шаблон?
Тогда получается передавать session можно только напрямую из роута?

Не в сети

#7 11.02.2016 10:02:51

Re: Не работает flash из контроллера на laravel5.2

corski
Покажи, что у тебя во view - где ты status пытаешься получить

Попробуй
return redirect()->route('main', ['save' => 'ok'])->with('status', 'default');

Не в сети

#8 11.02.2016 10:09:07

Re: Не работает flash из контроллера на laravel5.2

Хотя по идее 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

Не в сети

#9 15.02.2016 09:14:50

Re: Не работает flash из контроллера на laravel5.2

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 () {
    //
});

Не в сети

#10 15.02.2016 09:44:43

Re: Не работает flash из контроллера на laravel5.2

Прямо смежная тема )
так сделай

/*
|--------------------------------------------------------------------------
| 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

Не в сети

#11 16.02.2016 10:04:31

Re: Не работает flash из контроллера на laravel5.2

Делаю

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]);

Не в сети

#12 16.02.2016 10:09:15

Re: Не работает flash из контроллера на laravel5.2

Подскажите, каким способом тогда лучше сделать?
Мне нужно сделать редирект из котроллера на '/' с сообщение об удачном действие.

Не в сети

#13 16.02.2016 10:17:46

Re: Не работает flash из контроллера на laravel5.2

corsik пишет:

Делаю
Routes

Route::controller('/akp', 'AkpController');

Route::group(['middleware' => ['web']], function () {
    Route::any('/', ['as' => 'main', function() {
            //session()->flash('status', 'default');
            return view('index');
        }]);
});

Ты вынес за пределы группы с web мидлваре, зачем?
я же показал выше как надо

Не в сети

#14 16.02.2016 16:41:45

Re: Не работает flash из контроллера на laravel5.2

если поместить Route::controller('/akp', 'AkpController'); в  Route::group(['middleware' => ['web']], function () {
то получаю

TokenMismatchException in VerifyCsrfToken.php line 67:

Не в сети

#15 16.02.2016 17:33:46

Re: Не работает flash из контроллера на laravel5.2

Проблема решилась, путь отказа от Route::controller
С версии laravel 5.1 он устарел.

Не в сети

#16 17.02.2016 15:45:20

duster
Откуда: Мельбурн
Сообщений: 148

Re: Не работает flash из контроллера на laravel5.2

Он пока работает, от него решено в будущем отказаться из-за ряда минусов неявного задания маршрутов

Не в сети

Подвал раздела