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页面.而是显示询问的页面.我的重定向有什么问题吗?
您似乎试图直接从您的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)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |