ZF2维护页面

时间:2014-05-02 19:30:42

标签: php redirect zend-framework2 maintenance

我尝试使用ZF2设置维护页面,但它不起作用。我将一个maintenance.html页面放在公共文件夹(www)中,在我的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页面。而是显示询问的页面。 我的重定向有什么问题吗?

2 个答案:

答案 0 :(得分:5)

您似乎试图直接通过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);
}

答案 1 :(得分:1)

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

你可能想要更像的东西:

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