2016-08-10 42 views
1

我怎样才能显示自定义错误页,而不是完整性约束违规设置错误页面IntegrityException - 警予\ DB \ IntegrityException错误Yii中2如何在警予2

我如何能赶上和Yii中抛出的异常此2.0

+0

http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html – yafater

+0

这不是我的答案 –

回答

0

请尝试以下方法。在事件\yii\web\Response::EVENT_BEFORE_SEND上添加自定义回调函数,您可以在其中检查当前异常,然后重新定义响应内容或将用户重定向到任意位置。

例如,您可以添加到您的配置是这样的:

'response' => [ 
    'class' => 'yii\web\Response', 
    'on beforeSend' => function ($event) { 
     $exception = \Yii::$app->errorHandler->exception; 
     /* @var \yii\web\Response $response */ 
     $response = $event->sender; 

     if ($response->isServerError && is_a($exception, \yii\db\IntegrityException::class)) { 
      // here you can define custom message to show 
      $response->data = 'Integrity exception: ' . $exception->getMessage(); 

      // or render custom view 
      //$response->data = \Yii::$app->getView()->render('@app/views/site/error.php', ['exception' => $exception]); 

      // or redirect... 
      //$response->redirect('https://www.google.ru/?gws_rd=ssl#newwindow=1&q=Integrity+exception+Yii2'); 
     } 
    }, 
], 
+0

我的问题是,我怎么能用try&catch语句来做到这一点? –

+0

@NarimanDelavary那么究竟是什么问题?至于我 - 这很简单,但实际的实现(你应该把你的try-catch块),这取决于你的需求。你甚至在你的问题的评论中有一个手册的链接。你有没有试图自己做? – oakymax

+0

感谢Maxim.My问题解决 –