ZF2维护页面

Tra*_*rac 2 php maintenance redirect zend-framework2

我尝试使用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;
    }
Run Code Online (Sandbox Code Playgroud)

我输入if原因$ config ['maintenance']为true,但它没有按预期显示我的maintenance.html页面.而是显示询问的页面.我的重定向有什么问题吗?

Cri*_*isp 5

您似乎试图直接从您的onBootstrap方法短路请求.这不起作用,此时路线尚未解决且控制器尚未派遣.从本质上讲,您所做的只是预先填充响应,只有在路由和分派请求后才会覆盖它.

如果你想影响响应,你需要听另一个MvcEvents.看起来你想在调度控制器之前这样做,所以这样做的地方就是在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);
}
Run Code Online (Sandbox Code Playgroud)