繁体   English   中英

ZF2维护页面

[英]ZF2 maintenance page

我尝试使用ZF2设置维护页面,但无法正常工作。 我在公共文件夹(www)中放置了一个maintenance.html页面,在我的onbootstrap函数中,我得到了以下代码:

    $config = $e->getApplication()->getServiceManager()->get('Appli\Config'); 
    if($config['maintenance']) {
        $response  = $e->getResponse();
        $response->getHeaders()->addHeaderLine('Location', '/maintenance.html');
        $response->setStatusCode(503);
        return $response;
    }

输入if原因$ config ['maintenance']为true,但未按预期显示我的maintenance.html页面。 而是显示要求的页面。 我的重定向是否有问题?

您似乎正在尝试直接通过onBootstrap方法使请求短路。 那是行不通的,到那时路由还没有解决,还没有调度控制器。 本质上,您要做的只是预填充响应,仅当路由请求和分派请求后,响应才被覆盖。

如果要影响响应,则需要侦听其他MvcEvent 似乎您想在调度控制器之前执行此操作,因此,执行该操作的位置应在EVENT_ROUTE ,理想情况下应具有较高的优先级,以便在路由器解析路由之前进行此操作(节省了处理解析路由的浪费,永远不会被派遣)。

public function onBootstrap(MvcEvent $e)
{
    $events = $e->getApplication()->getEventManager();
    $events->attach(MvcEvent::EVENT_ROUTE, function (MvcEvent $r) {
        $config = $r->getApplication()->getServiceManager()->get('Appli\Config');
        if ($config['maintenance']) {
            $response = $r->getResponse();
            // set content & status
            $response->setStatusCode(503);
            $response->setContent('<h1>Service Unavailable</h1>');
            // short-circuit request...
            return $response;
        }
    }, 1000);
}

您无法设置503状态代码重定向-两者是互斥的,因为重定向使用3xx状态代码。

您可能想要更多类似的东西:

$response->setContent(file_get_contents('/path/to/maintenance.html'));
$response->setStatusCode(503);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM