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
方法中短路请求。那是行不通的,那时路由还没有解决,控制器也没有被调度。本质上,您所做的只是预先填充响应,只有在请求被路由和分派后才会覆盖它。
如果您想影响响应,您需要收听其他MvcEvent
s 之一。似乎您想在调度控制器之前执行此操作,因此执行此操作的位置将在 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维护页面的主要内容,如果未能解决你的问题,请参考以下文章