Silex: перенаправление с данными Flash
Мне нужно перенаправить одну страницу на другую с сообщением в Silex. Надеюсь, это ларавелезский способ сделать это, но я очень сомневаюсь в этом:
$app->redirect('/here', 301)->with('message', 'text');
Затем я хочу отобразить сообщение в своем шаблоне:
{{ message }}
Если нет, есть ли другой способ?
Update
Я вижу, что метод getFlashBag
в Symfony - это то, что я должен использовать? В частности, я использую систему управления содержанием Bolt.
Ответы
Ответ 1
Да, FlashBag - правильный путь.
Установите флеш-сообщение в контроллере (вы можете добавить несколько сообщений):
$app['session']->getFlashBag()->add('message', 'text');
$app->redirect('/here', 301)
И напечатайте его в шаблоне:
{% for message in app.session.getFlashBag.get('message') %}
{{ message }}
{% endfor %}
Ответ 2
Я создал этот простой FlashBagTrait
, который может быть полезен:
<?php
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
trait FlashBagTrait
{
/**
* @return FlashBagInterface
*/
public function getFlashBag() {
return $this['session']->getFlashBag();
}
}
Просто добавьте его в класс Application
, и он будет делать вещи когда-нибудь немного проще!
$app->getFlashBag()->add('message',array('type'=>"danger",'content'=>"You shouldn't be here"));
{% if app.flashbag.peek('message') %}
<div class="row">
{% for flash in app.flashbag.get('message') %}
<div class="bs-callout bs-callout-{{ flash.type }}">
<p>{{ flash.content }}</p>
</div>
{% endfor %}
</div>
{% endif %}
Его основное преимущество заключается в том, что подсказка типа будет работать в PhpStorm.
Вы также можете добавить его как поставщика услуг,
$app['flashbag'] = $app->share(function (Application $app) {
return $app['session']->getFlashBag();
});
Что делает его более удобным для использования с PHP (но вы теряете подсказку типа):
$app['flashbag']->add('message',array('type'=>"danger",'content'=>"You shouldn't be here"));