web-dev-qa-db-ja.com

Yii2セッション、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変数に適切なフラッシュが表示されますが、このif文では表示されません。セッションコンポーネントなどを設定する必要があるかもしれません...

35
Anton Abramov

フラッシュを設定するには、

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

そしてそれを表示するために..

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

あなたはこのように試すことができます

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

単純に:

  1. 2つの文字列を/views/layout/main.phpに追加します

    • ブロックuse内:
    use frontend\widgets\Alert;
    
    • <?= $content ?>の前:
    <?= Alert::widget() ?>
    
  2. これで、すべてのメッセージが自動的に画面に表示されます。試してみよう!コントローラーのメソッドを追加します。
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');
14

これの代わりに:

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

return;

これを試して:

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

それは私のためにうまく機能しています。

9

yii2では、フラッシュはこのように設定できます

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

私の解決策は次のとおりです。標準のSessionクラスを上書きします。

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 } ?>
1
Turako

うまくいかなかった。私はむしろ使用したい:

コントローラーで:

$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 
} 
?>
0
dom

私の場合、リダイレクトの前にhasFlashを使用すると、リダイレクト後にフラッシュメッセージが削除されます。

if (!Yii::$app->getSession()->hasFlash('success')) {
    Yii::$app->getSession()->setFlash('success', Yii::t('app', 'your text'));
}  

だから私はこれを追加して助けた

if (!Yii::$app->getSession()->hasFlash('success')) {
    Yii::$app->getSession()->setFlash('success', Yii::t('app', 'your text'));
} else {
    Yii::$app->getSession()->set('__flash', array('success' => -1));
} 
0
Azamat