session flash

新手提问 · kfc · 于 4年前 发布 · 2629 次阅读

在一个controller的action函数中, 调用flash()函数, 就可以在页面上跳出一个确认框. 比如下面的代码

$this->flash('更新成功', 'success');
return $this->refresh();

会生成如下html:

<div id="w5-success" class="alert-success alert fade in">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
更新成功
</div>

我的问题是:
yii2是如何生成这些html代码的? flash()函数只是往$_SESSION[]中增加了一个值. 它又是在哪个函数中变成html的呢?

共收到 3 条回复
kfc#14年前 2 个赞

搞明白了, yii2只提供flash的存储, 显示完全是由用户自己来完成的. getyii是用Alert来显示flash的.
在frontend/widgets/Alert.php中实现flash的:

public function init()
{
    parent::init();

    $session = \Yii::$app->getSession();
    $flashes = $session->getAllFlashes();
    ...
    echo \yii\bootstrap\Alert::widget([...]);
    ...
}

而Alert是埋在frontend/views/layouts/main.php中

<div class="container">
    <?= Breadcrumbs::widget([
        'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
    ]) ?>
    <?= Alert::widget() ?>
    <?= $content ?>
</div>
light#24年前 0 个赞

@kfc 我要一个新奥尔良鸡腿堡套餐!

mousechen#34年前 0 个赞

@kfc #1楼 回答的很详细。就是这样。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册