我需要根据自己的'errors.500'
视图中的异常类型显示消息。我已经在Handler
类中完成了以下解决方案,到目前为止,该解决方案仍然有效,但是恐怕这还不太正确,因为它将服务器类型异常转换为http类型。会造成任何危险吗?有什么更好的方法?
public function render($request, Exception $exception)
{
if ($exception instanceof FatalErrorException) {
$exception = new HttpException(500, "Server error");
}
if ($exception instanceof ModelNotFoundException) {
$exception = new HttpException(500, "Model not found");
}
if ($exception instanceof RelationNotFoundException) {
$exception = new HttpException(500, "Relation not found");
}
return parent::render($request, $exception);
}
答案 0 :(得分:1)
在开发人员模式下显示异常是一个好主意。对于程序员而言,能够在运行时看到异常特别有用,但是,当向他们显示异常时,您的用户通常不会了解太多,而了解它们的极少数用户可能会对您使用该异常。
在我看来,最好的方法是向可信赖的开发人员显示异常,并向一般用户显示通用错误页面/视图/弹出窗口/屏幕,因此,将问题转换为仅适用于您的工作人员的异常并转换问题如果是用户,则显示为友好文本。
答案 1 :(得分:0)
仅仅是为了您可以设置正确的状态码吗?
public function render($request, Exception $exception)
{
if ($exception instanceof FatalErrorException) {
$code = 500;
}
if ($exception instanceof ModelNotFoundException) {
$code = 404;
}
if ($exception instanceof RelationNotFoundException) {
$code = 404;
}
$exception = new HttpException($exception->getMessage(), $code, $exception->getFile(), $exception->getLine());
return parent::render($request, $exception);
}