web-dev-qa-db-fra.com

Yii2 Session, messages flash

J'ai un problème avec la configuration des messages flash . Donc, j'ai une action qui dans certains cas devrait rediriger avec flash. Cela ressemble à ceci:

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

Après la redirection en vue j'ai ce

<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>

Le problème est que je ne vois aucun message ici. Dans le panneau de débogage, je vois que SESSION var est renseigné avec un bon flash, mais il ne s'affiche pas avec cette instruction if .. Peut-être dois-je configurer le composant de session ou quelque chose de ce genre? ...

35
Anton Abramov

Pour définir le flash, essayez comme

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

Et pour l'afficher ..

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

tu peux essayer comme ça

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

Faites simplement:

  1. Ajoutez deux chaînes à: /views/layout/main.php

    • dans le bloc use:

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

    <?= Alert::widget() ?>
    
  2. Maintenant, tous les messages seront automatiquement à l'écran. Essayons! Ajouter dans la méthode de tout contrôleur:
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
NicholasMuestras

Au lieu de cela:

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

return;

essaye ça: 

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

Cela fonctionne bien pour moi.

8

yii2 flash peut être réglé comme ça

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

Voici ma solution: écraser standart Classe de 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;
    }
}

Afin que vous puissiez:

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

Et affichez ces messages:

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

N'a pas travaillé pour moi .. Je préfère utiliser:

Dans le contrôleur:

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

Dans la vue:

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

dans mon cas, le message flash est supprimé après la redirection, lorsque j'utilise hasFlash avant la redirection. 

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

Alors j'ai ajouté ça et ça a aidé 

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