Flash-сообщения Symfony 4 не работают после redirectToRoute () - PullRequest
0 голосов
/ 05 мая 2018

Я не знаю, что не так, это должно быть очень просто.

У меня есть эта функция:

/**
 *
 * @Route("/fin/carteira/list", name="carteira_list")
 */
public function list(Request $request) {
    $repo = $this->getDoctrine()->getRepository(Carteira::class);
    $dados = $repo->findAll();

    return $this->render('financeiro/carteiraList.html.twig', array (
            'dados' => $dados 
    ));
}

И еще одна функция для удаления;

/**
 *
 * @Route("/fin/carteira/{id}/delete", name="carteira_delete")
 * @Method("POST")
 *
 */
public function delete(Request $request, Carteira $carteira) {
    if (! $this->isCsrfTokenValid('delete', $request->request->get('token'))) {
        $this->addFlash('error', 'Erro interno do sistema.');
    } else {
        try {
            $em = $this->getDoctrine()->getManager();
            $em->remove($carteira);
            $em->flush();
            $this->addFlash('success', 'post.deleted_successfully');
        } catch ( \Exception $e ) {
            $this->addFlash('error', 'Erro ao deletar carteira.');
        }
    }

    return $this->redirectToRoute('carteira_list');
}

На моей веточке шаблон:

{% for flashMessage in app.flashes('error') %}

<div class="alert alert-danger alert-dismissible fade show" role="alert">
    <h4 class="alert-heading">Erro</h4>
    <p>{{ flashMessage }}</p>
</div>

{% endfor %}

Но это ничего не показывает.

На самом деле, если я удаляю return $this->redirectToRoute('carteira_list'); и нажимаю F5, чтобы перезагрузить страницу, то появляется div с ошибками.

Но что я делаю не так ?? Разве это не, с return $this->redirectToRoute('carteira_list');, правильный путь?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Или даже короче для любого типа сообщения, согласно документам https://symfony.com/doc/current/controller.html#flash-messages Попробуйте это в своем шаблоне Twig.

      {# display any flash message #}    
      {% for label, messages in app.flashes %}
        {% for message in messages %}
            <div class="alert alert-{{ label }} alert-dismissible fade show">
                {{ message }}
            </div>
        {% endfor %}
      {% endfor %}
0 голосов
/ 25 мая 2019

У меня была похожая проблема, и это была не Symfony или даже PHP, это был браузер Google Chrome, я запускал тот же код в других браузерах, и он работал как ожидалось.

0 голосов
/ 10 июля 2018

Попробуйте заменить код Twig кодом ниже. Это должно работать, я думаю.

{% for label, flashes in app.session.flashbag.all %}
    {% for flash in flashes %}
        {% if ( label == 'success' ) %}
            <div class="alert alert-success alert-dismissible fade show">
                {{ flash }}
            </div>
        {% elseif ( label == 'error' ) %}
            <div class="alert alert-danger alert-dismissible fade show">
                {{ flash }}
            </div>
        {% endif %}
    {% endfor %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...