Yii2动态维护模式

时间:2014-12-12 19:07:19

标签: php yii2 maintenance-mode

我在Yii2项目中使用了以下库:Click here

我已经设置并测试了它,效果很好。但现在我想让它变得动态,如果管理员点击切换开关,网站应该进入维护模式。为了实现这一点,我需要做的是使启用变量为true,这在该库的Maintenance类中使用。

但我的问题是如何将我的切换开关链接到该变量。

提前致谢!

2 个答案:

答案 0 :(得分:5)

将Yii2站点设置为维护模式意味着在处理请求之前强制路由。这可以通过config on beforeRequest闭包来完成:

在/config/web.php

return [
    ...
    'bootstrap' => ['log'],
    'on beforeRequest' => function ($event) {
        if (Yii::$app->params['portalMode'] == 'maintenance') {
            $letMeIn = Yii::$app->session['letMeIn'] || isset($_GET['letMeIn']);
            if (!$letMeIn) {
                Yii::$app->catchAll = [
                    // force route if portal in maintenance mode
                    'site/maintenance',
                ];
            }else{
                Yii::$app->session['letMeIn'] = 1;
            }
        }
    },
    'components' => [
    ...
]

并在SiteController中创建操作“actionMaintenance”:

public function actionMaintenance()
{
    return $this->render('maintenance');
}

并在视图views/site/maintenance.php中调整您的布局:

<h1>The site is currently under maintenance</h1>
<p>We apologize for inconvenience. Please come back later.</p>

另见related post

答案 1 :(得分:2)

您可以访问应用程序的组件,如下所示:

Yii::$app->componentName

因此,使用此组件,您可以像下面一样访问它:

Yii::$app->maintenanceMode->enable=FALSE;