ZF2维护页面

Posted

技术标签:

【中文标题】ZF2维护页面【英文标题】:ZF2 maintenance page 【发布时间】:2014-05-02 19:30:42 【问题描述】:

我尝试使用 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 cause $config['maintenance'] 为真,但它没有按预期显示我的 maintenance.html 页面。相反,它会显示询问的页面。 我的重定向有问题吗?

【问题讨论】:

【参考方案1】:

您似乎试图直接从您的 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);

【讨论】:

确实,我曾经在 onBootstrap 中对我的 ACL 权限的请求进行短路,并且不知何故想为维护页面做同样的事情。您的解决方案运行良好,我喜欢您削减无用流程的方式。非常感谢您的帮助和解释【参考方案2】:

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

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

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

【讨论】:

这很奇怪,因为 ZF2 使用它来处理 404 错误并且它工作正常。尝试了 setContent,即使没有 file_get_contents(将 html 代码直接作为 setContent 参数),它仍然保持不变。询问的页面仍然显示,内容没有改变:/

以上是关于ZF2维护页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现维护页面

2020-09-22推荐系统账号管理页面维护

维护页面控制[关闭]

ZF2:如何从其他模块渲染视图

WordPress 维护页面随机出现

维护页面重定向的正确状态代码?