我已经开始在当前的 dev-develop 分支中使用 ZF2 的开发版本,从那时起,我在每个异常上都会出现白屏,并在视图的某个地方抛出。
我已经安装了 SkeletonApplication 来查看,如果它是我的应用程序中的某些东西,那是导致它的原因,但同样的问题也出现在那里。降级到 dev-master 解决了这个问题,我得到了标准的异常转储。
查看 zf2 代码,我想我已经找到了原因。在 Zend\Mvc\View\Http\DefaultRenderingStrategy::render() 现在我们有:
public function render(MvcEvent $e)
{
......
try {
$view->render($viewModel);
} catch(\Exception $ex) {
$application = $e->getApplication();
$events = $application->getEventManager();
$e->setError(Application::ERROR_EXCEPTION)
->setParam('exception', $ex);
$events->trigger(MvcEvent::EVENT_RENDER_ERROR, $e);
}
return $response;
}
所以异常被捕获,但响应是空的,我不知道后者的原因。
但是出现了另一个问题:如果在布局中触发错误,错误处理程序将如何呈现异常页面?(就像在我的情况下 - 导航助手,它无法找到容器。)唯一可能的解决方案是有一个额外的错误布局,但这是没有意义的,因为不再存在良好的异常处理的原因。
于是产生了以下问题:
- ZF2 开发者打算如何解决这个问题?
- 是否有当前的解决方法(实际上注释掉 try { } catch() { } 可以解决问题,但不是一个好的解决方案)
- 由于带来上述代码的拉取请求已关闭,我是否在做任何完全错误的事情,我对它的工作方式是否完全错误?