Symfony 4 addFlash появляется на вкладке сети, но не на странице - PullRequest
0 голосов
/ 24 января 2019

Странная вещь, которую я получил здесь.Я скопировал все с S4 Doc, но, похоже, он работает не так, как задумано.Код контроллера:

// Adding a success type message
$this->addFlash("success", "This is a success message");
// Adding a warning type message
$this->addFlash("warning", "This is a warning message");
// Adding an error type message
$this->addFlash("error", "This is an error message");
// Adding a custom type message, remember the type is totally up to you !
$this->addFlash("bat-alarm", "Gotham needs Batman");
// 2. Retrieve manually the flashbag
// Retrieve flashbag from the controller
$flashbag = $this->get('session')->getFlashBag();
// Set a flash message
$flashbag->add("other", "This is another flash message with other type");
// Render some twig view
$carList = $this->getDoctrine()->getRepository(CarProject::class)->findAll();                
return $this->render('index.html.twig', array ('carList' => $carList));

index.html.twig code:

<div>
      {% for flash_message in app.session.flashBag.get('success') %}
        <div class="alert alert-success">
        {{ flash_message }}
   </div>
      {% endfor %}
   </div>

Я вижу, что он загружен на вкладке Chrome DevTools Network и является последним ответом в списке, однаконе отображается на реальной странице.enter image description here Есть идеи?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Документы Symfony указывают, что вы должны использовать {{ app.flashes }}. Как этот пример:

    {% for label, messages in app.flashes(['warning', 'error']) %}
        {% for message in messages %}
            <div class="alert alert-{{ label }}">
                {{ message }}
            </div>
        {% endfor %}
    {% endfor %}
0 голосов
/ 25 января 2019

Окончательный ответ из моего комментария, чтобы вы могли решить этот вопрос: вы пытаетесь сделать AJAX-вспышки, которые невозможны в чистой ветке.

Вы должны либо поискать что-то вроде toastr , либо поиграть с некоторыми плагинами jquery.

0 голосов
/ 24 января 2019

Вам нужна вспышка Symfony 4, которая действительно работает? (Это не значит, что документ не работает)

Действие вашего контроллера: (

( TranslatorInterface должен быть импортирован: use Symfony\Component\Translation\TranslatorInterface;)

public function new(Request $request, TranslatorInterface $translator): Response
{

    // If you want to get the message from the translations file
    $this->addFlash(
        'success',
        $translator->trans('user.edit.flash.success', [
            '%user_info%' => 'balzacLeGeek',
        ])
    );

    // If you want to set the message directly
    $this->addFlash(
        'success',
        'L\'utilisateur balzacLeGeek a été mise à jour avec succes'
    );

    // Rest of your code 
    // here ....
}

В представлении Twig ( base.html.twig )

{% for label, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}" role="alert">
          {{ message }}
        </div>
    {% endfor %}
{% endfor %}

Если вы использовали перевод в вашем контроллере, это файл перевода, который у меня есть для примера: (внутри translations / translation.en.yaml )

user:
    edit:
        flash:
            success: Great! The user %metier_info% was edited
            error: Sorry! An error was occurend when we have trying to update %metier_info%.

Если вы хотите использовать bootstrap-notify , давайте что-нибудь настроим

В вашем представлении Twig ( base.html.twig )

{% for label, messages in app.flashes %}
    {% for message in messages %}
        <input type="hidden" class="notifyLabel" value="{{ label }}">
        <input type="hidden" class="notifyMessage" value="{{ message }}">
    {% endfor %}
{% endfor %}

Всегда в base.html.twig , но в ваших сценариях разделе

<script src="https://github.com/mouse0270/bootstrap-notify/releases/download/3.1.3/bootstrap-notify.min.js"></script>
<script>
    $(function() {
        var notifyLabel = $('.notifyLabel').val();
        var notifyMessage = $('.notifyMessage').val();

        if(notifyLabel != undefined) {
            $.notify({
                    // options
                    icon: 'fas fa-check-circle',
                    title: '',
                    message: notifyMessage,
                    url: '',
                    target: '_blank'
                },{
                    // settings
                    element: 'body',
                    type: notifyLabel,
                    allow_dismiss: true,
                    placement: {
                        from: "bottom",
                        align: "right"
                    },
                    animate: {
                        enter: 'animated bounceIn',
                        exit: 'animated bounceOut'
                    }
                }
            );
        }
    });
</script>

Наконец, давайте добавим немного стиля: -)

<style type="text/css">
    .notice {
        padding: 15px;
        background-color: #fafafa;
        border-left: 6px solid #7f7f84;
        margin-bottom: 10px;
        -webkit-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2);
           -moz-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2);
                box-shadow: 0 5px 8px -6px rgba(0,0,0,.2);
    }
    .notice-sm {
        padding: 10px;
        font-size: 80%;
    }
    .notice-lg {
        padding: 35px;
        font-size: large;
    }
    .notice-success {
        border-color: #80D651;
    }
    .notice-success>strong {
        color: #80D651;
    }
    .notice-info {
        border-color: #45ABCD;
    }
    .notice-info>strong {
        color: #45ABCD;
    }
    .notice-warning {
        border-color: #FEAF20;
    }
    .notice-warning>strong {
        color: #FEAF20;
    }
    .notice-danger {
        border-color: #d73814;
    }
    .notice-danger>strong {
        color: #d73814;
    }
</style>
...