[英]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.