Динамическая передача строки в представление в laravel4

я новичок в laravel, и я пытаюсь передать строку в представление из контроллера. Как я понимаю, должно быть примерно так:

return Redirect::route('home')->with('global','Hi!');

Я пытаюсь перенаправить пользователя на «домой», но у меня есть строка «Привет!» появиться перед всем остальным. «home» — это маршрут, который отображает представление «home.blade.php».

Как есть, пользователь перенаправляется, ошибок нет, но строка "Привет!" не отображается в «домашнем» представлении. Я думаю, мне нужно что-то в шаблоне лезвия «домашний», чтобы сообщить laravel, куда поместить строку «Привет!», Но что это должно быть?


person Diogo Franco    schedule 05.02.2014    source источник


Ответы (2)


Не зная больше о вашем коде, трудно точно сказать, что делать, но вы должны знать, что Redirect::route()->with() НЕ совпадает с View::make()->with(). View::make()->with('var', 'value') передает переменную с именем var в представление, тогда как Redirect::route()->with('var', 'value') устанавливает переменную флэш-памяти сеанса.

Чтобы получить доступ к «глобальному» в home.blade.php, вам нужно найти его в сеансе:

{{{ Session::get('global') }}}

Кстати, чтобы получить фактическую «глобальную» переменную представления, вам нужно View::share('var', 'value'), однако это не будет работать при перенаправлении, только для текущего запроса.

person alexrussell    schedule 05.02.2014

Я думаю, что вы ищете

Session::flash('global', 'Hi!');

Метод "flash()" помещает данные в сессию, но только для одного запроса. После этого он удаляется, что в данном случае похоже на то, что вы хотите. Подробнее об этом смотрите в документации! http://laravel.com/docs/session#flash-data

После того, как вы загрузили эти данные в сеанс, вы можете затем return Redirect::view('home') точно так же, как вы уже делаете, и в домашнем представлении используйте {{ Session::get('global') }}, как предложил alexrussell.

person patricksayshi    schedule 05.02.2014
comment
Большое спасибо, это сработало, просто поместив {{{ session::get('global') }}} в шаблон, но я больше изучу этот метод flash. - person Diogo Franco; 05.02.2014
comment
Да, это тоже точно сработает! Думаю, я просто предпочитаю использовать flash(), потому что он делает сеанс красивым и аккуратным. - person patricksayshi; 05.02.2014