Подтвердить что ты не робот

Yii2 Session, Flash-сообщения

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

if(!$this->_isSameOrg($reports)){
    \Yii::$app->session->setFlash('consol_v_error',\Yii::t('app/consol', 'some_text'));
    $this->redirect(\Yii::$app->request->getReferrer());
    return;
}

После переадресации я вижу это

<div class="col-lg-12">
    <?php if(Yii::$app->session->hasFlash('consol_v_error')): ?>
        <div class="alert alert-danger" role="alert">
            <?= Yii::$app->session->getFlash('consol_v_error') ?>
        </div>
    <?php endif; ?>
</div>

Проблема в том, что я не вижу здесь никакого сообщения. В панели "Отладка" я вижу SESSION var, заполненную хорошей флеш-памятью, но она не отображается с помощью этого оператора if. Может быть, мне нужно настроить компонент сеанса или что-то еще?...

4b9b3361

Ответ 1

Чтобы установить вспышку, попробуйте

  \Yii::$app->getSession()->setFlash('error', 'Your Text Here..');
   return $this->redirect('Your Action');

И чтобы отобразить его.

   <?= Yii::$app->session->getFlash('error'); ?>

Ответ 2

вы можете попробовать как это

<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>

Ответ 3

Просто выполните:

  • Добавьте две строки: /views/layout/main.php

    • в блоке use:

    use frontend\widgets\Alert;
    
    • до <?= $content ?>:

    <?= Alert::widget() ?>
    
  • Теперь все сообщения будут автоматически отображаться на экране. Давай попробуем! Добавить в любой метод контроллера:
Yii::$app->session->setFlash('warning', 'bla bla bla bla 1');

Yii::$app->session->setFlash('success', 'bla bla 2');

Yii::$app->session->setFlash('error', 'bla bla 3');

Ответ 4

Вместо этого:

$this->redirect(\Yii::$app->request->getReferrer());

return;

попробуйте следующее:

return $this->redirect(\Yii::$app->request->getReferrer());

Он отлично работает для меня.

Ответ 5

в yii2 флэш-память может быть установлена ​​следующим образом

Yii::$app->session->setFlash('success', 'Thank you ');

Ответ 6

Вот мое решение:  перезаписать стандарт Класс сеанса:

namespace app\components;

use Yii;

class Session extends \yii\web\Session {

    public function getAllFlashesNormalized() {
        $flashes = [];
        foreach (Yii::$app->session->getAllFlashes() as $key => $flash) {
            if (is_array($flash))
                foreach ($flash AS $message)
                    $flashes[] = ['key' => $key, 'message' => $message];
            else
                $flashes[] = ['key' => $key, 'message' => $flash];
        }

        return $flashes;
    }
}

Итак, вы можете:

Yii::$app->session->addFlash('success', 'Text.');
Yii::$app->session->addFlash('success', 'Another text.');

И вывести следующие сообщения:

<?php foreach (Yii::$app->session->getAllFlashesNormalized() as $flash) { ?>
    <div class="alert alert-<?=$flash['key']?>" role="alert"><?=$flash['message']?></div>
<?php } ?>

Ответ 7

Не работает для меня. Я бы предпочел использовать:

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

$session = new Session;
$session->addFlash("warning","Your text here");

В представлении:

<?php 
$session = new Session;
foreach ($session->getAllFlashesNormalized() as $flash) { 
?>
<div class="alert alert-<?=$flash['key']?>" role="alert">
    <?=$flash['message']?>
</div>
<?php 
} 
?>