Как получить доступ к peekAll () в base.html.twig для проверки сообщений / вспышек - PullRequest
0 голосов
/ 26 октября 2018

в symfony 4.1

В контроллере:

$this->addFlash(
    'notice',
    'Your changes were saved!'
);
 return $this->render(...);

Базовый шаблон Twig:

{% for message in app.flashes('notice') %}
    <div class="flash-notice">
        {{ message }}
    </div>
{% endfor %}

Это прекрасно работает, но я хочу обернуть ВСЕ сообщения в div. Ниже не работает:

{% if app.flashes is not empty %}
  <div id="messageBox" class="overlay">
    <div class="message" onclick="slide(document.querySelector('#messageBox')); this.classList.add('fadeAway');">
      {% for label, messages in app.flashes %}
        <section class="{{ label }}">
          <p><b>{{ label }}</b></p>
          <ul>
            {% for message in messages %}
              <li>{{ message }}</li>
            {% endfor %}
          </ul>
        </section>
      {% endfor %}
    </div>
  </div>
{% endif %}

Проблема в том, что строка {% if app.flashes is not empty %} стирает сообщения, поэтому для циклов и пустых результатов следующее.

Как использовать peekAll() для логики if?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Правильный способ проверки с помощью peekAll() - {% if app.session.flashbag.peekAll() is not empty %} Это не очистит flashBag в соответствии с документацией.

0 голосов
/ 26 октября 2018

Я не знаю, является ли это лучшим способом сделать это, но вот мое решение.

В base.html.twig:

{% set flashes = app.flashes %}
{% if flashes is not empty %}
  <div id="messageBox" class="overlay">
    <div class="message" onclick="slide(document.querySelector('#messageBox')); this.classList.add('fadeAway');">
      {% for label, messages in flashes %}
        <section class="{{ label }}">
          <p><b>{{ label }}</b></p>
          <ul>
            {% for message in messages %}
              <li>{{ message }}</li>
            {% endfor %}
          </ul>
        </section>
      {% endfor %}
    </div>
  </div>
{% endif %}

Как правило, установите возвращаемое значение app.flashes в flashes и обработайте его.

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