Показывать флеш-сообщение без перенаправления (например, пересылка).Сообщения показаны дважды - PullRequest
7 голосов
/ 06 января 2012

Возможно ли показывать флеш-сообщения в Symfony 2 без перенаправления? Или редактирование основных файлов в другом возможном решении в группах Google?

//Symfony\Component\HttpFoundation\Session 
public function setFlash($name, $value, $persist = true) 
{ 
    if (false === $this->started) { 
        $this->start(); 
    } 
    $this->flashes[$name] = $value; 
    if($persist) { 
        unset($this->oldFlashes[$name]); 
    } 
    else { 
        $this->oldFlashes[$name] = $value; 
    } 
} 

UPDATE

О, на самом деле я заметил, что если я просто использовал переадресацию, показываются флеш-сообщения, но они все равно будут отображаться при следующем запросе

Ответы [ 3 ]

7 голосов
/ 14 февраля 2012

Зачем использовать вспышки, если вы не хотите, чтобы они сохранялись до следующего запроса?

Не можете ли вы найти другие способы отображения обратной связи, такие как параметры шаблона?

Если нет, вы можете добавить это в свои шаблоны (если вы видите вспышки, как показано ниже):

{% if app.session.hasFlash('notice') %}
<div class="flash-notice">
    {{ app.session.flash('notice') }}
    {{ app.session.removeFlash('notice') }}
</div>
{% endif %}

Так что любой шаблон, отображающий эти мигания до перенаправления, удалит их из сеанса до возврата ответа. Я думаю, что это последнее лучшее решение.

3 голосов
/ 13 февраля 2012

Я буду говорить в общих чертах, потому что вы хотите что-то, что не является готовым стандартом.

В это время флеш-сообщения Symfony появляются после запроса, они так и есть, и чтобы сохранить его, вам нужно найти альтернативу, использовать вызов ajax.

Вам нужно вызвать скрипт действия, используя ajax-запрос, сериализовать данные формы, получить возвращаемое сообщение и затем отобразить его так, как он вам лучше подходит.

Я использовал http://jquery.bassistance.de/message/demo/ вместе с этим примером вызова jquery в некоторых проектах, работает хорошо:

 $.post("/product/saveAjax", { $("#product").serialize() },
 function(data){
  $().message(data.message);
 }, "json");

Возврат от сохранения элемента с помощью ajax отличается, в этом случае я кодирую данные с помощью JSON, поэтому, если вы хотите выполнить другие действия, вы можете ввести больше переменных в массив JSON, манипулируя ими внутри функции ( данные) {...}

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

1 голос
/ 15 февраля 2012

Flash-сообщения были созданы для того, чтобы выдержать перенаправление, которое вы обычно делаете после успешной отправки формы.Вот почему они удовлетворяют двум запросам.

Если вы хотите управлять уведомлениями пользователя soem в своем приложении, создайте контроллер, управляющий блоком TWIG уведомлений в вашем макете.Этот блок может встраивать флэш-сообщения И эти уведомления, которые вы обрабатываете с помощью контроллера.Вы должны будете установить их в своем сеансе, удалить их в вашем NotificationController, и все в порядке ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...