如何显示带有自定义消息的500错误视图?

时间:2018-09-10 12:47:17

标签: php laravel laravel-5

我需要根据自己的'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);
}

2 个答案:

答案 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);
}