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? ...
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'); ?>
tu peux essayer comme ça
<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
}
?>
Faites simplement:
Ajoutez deux chaînes à: /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');
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.
yii2 flash peut être réglé comme ça
Yii::$app->session->setFlash('success', 'Thank you ');
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 } ?>
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
}
?>
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));
}