Php 如何在ZF2应用程序中显示客户错误页面和设置响应代码?
在我的Module.php中,我附加了一个处理程序来捕获异常。这是可行的,但我不确定如何设置响应和视图模板 下面的代码尝试将响应代码设置为409并显示409.phtml模板。但是它不工作,它只是呈现原始的500错误页面Php 如何在ZF2应用程序中显示客户错误页面和设置响应代码?,php,doctrine-orm,exception-handling,zend-framework2,Php,Doctrine Orm,Exception Handling,Zend Framework2,在我的Module.php中,我附加了一个处理程序来捕获异常。这是可行的,但我不确定如何设置响应和视图模板 下面的代码尝试将响应代码设置为409并显示409.phtml模板。但是它不工作,它只是呈现原始的500错误页面 public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListene
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'handleError'));
}
public function handleError(MvcEvent $event)
{
//get the exception
$exception = $event->getParam('exception');
if (is_a($exception, 'Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException'))
{
$response = $event->getResponse();
$response = $response ?: new Response();
$model = new ViewModel(array());
$model->setTemplate('error\409');
$event->getViewModel()->addChild($model);
$response->setStatusCode(409);
$event->setResponse($response);
return $response;
}
}
这似乎有效,但了解其他人的想法会很有趣
public function handleError(MvcEvent $event)
{
//get the exception
$exception = $event->getParam('exception');
if (is_a($exception, 'Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException'))
{
$event->getResponse()->setStatusCode(409);
$model = new ViewModel(array());
$model->setTemplate('error/409');
$event->getViewModel()->clearChildren();
$event->getViewModel()->addChild($model);
$event->stopPropagation(true);
}
}
尝试更高的优先级。默认的异常策略
Zend\Mvc\View\Http\ExceptionStrategy
为。这将导致在您之前执行it。另外,请注意,该类使用$event->setResult($model)代码>而不是$event->getViewModel()->addChild($model)
。处理程序捕捉到异常ok,响应代码正确设置为409。只是它接着显示了500错误页面。我似乎已经用StopRobOrganization()解决了这个问题。当我有机会的时候,我会试着看看setResult($model)。谢谢你的评论。