如何在 laravel 5 中创建自定义错误页面

how do I create custom error page in laravel 5

我想在我的 Laravel 5 应用程序中显示自定义错误页面;例如,任何用户类型 URL,如 http://www.example.com/url123(错误),但 http://www.example.com/url(正确)。

默认错误显示为:

Uh-oh, something went wrong! Error Code: 500

但我想显示我的自定义视图

我如何实现这一点,如下面引用的页面所示:

https://mattstauffer.co/blog/laravel-5.0-custom-error-pages#how-to

https://laracasts.com/discuss/channels/general-discussion/how-do-i-create-a-custom-404-error-page

我目前的 app/Exceptions/Handler.php:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use symfony\http-kernel\Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class Handler extends ExceptionHandler {

    protected $dontReport = [
        'Symfony\Component\HttpKernel\Exception\HttpException'
    ];

    public function report(Exception $e)
    {
        return parent::report($e);
    }
    public function render($request, Exception $e)
    {
        if ($this->isHttpException($e))
        {
            return $this->renderHttpException($e);
        }
        else if($e instanceof NotFoundHttpException)
        {
            return response()->view('missing', [], 404);
        }
        else
        {
            return parent::render($request, $e);
        }
    }

}

并且我在 \resources\views\errors4.blade.php 处创建了一个错误视图,但 404.blade.php 仍然没有加载。

谢谢大家, 现在它运行成功,

我只是改变了我的 app/Exceptions/Handler.php :

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler {

    protected $dontReport = [
        'Symfony\Component\HttpKernel\Exception\HttpException'
    ];

    public function report(Exception $e)
    {
        return parent::report($e);
    }

    public function render($request, Exception $e)
    {
        if ($this->isHttpException($e)) {
            return $this->renderHttpException($e);
        } else {
            return parent::render($request, $e);
        }
    }

}

并创建错误视图:\resources\views\errors4.blade.php

这对我有用 Laravel 5.5:-

/config/constants.php

define('ERROR_MSG_403', "You are not authorized to view that page!");
define('ERROR_MSG_404', "Page not found!");
define('ERROR_MSG_UNKNOWN', "Something went wrong!");

/app/Exceptions/Handler.php

public function render($request, Exception $e)
    {
        $response = [];

        $response['exception'] = get_class($e);
        $response['status_code'] = $e->getStatusCode();

        switch($response['status_code'])
        {
            case 403:
                $response['message'] = ERROR_MSG_403;
                break;
            case 404:
                $response['message'] = ERROR_MSG_404;
                break;
            default:
                $response['message'] = ERROR_MSG_UNKNOWN;
                break;
        }

        return response()->view('Error.error', compact('response'));
        // return parent::render($request, $exception);
    }

/resources/views/Error/error.blade.php

<?=dd($response); //Implement your view layout here?>

我正在使用 Laravel 6.4 为此,您可以创建自定义错误页面 blade 文件,Laravel 会为您完成剩下的工作. 运行在你的项目目录下执行以下命令

php artisan vendor:publish --tag=laravel-errors

这将在 resources/views/errors/. 中创建 blade 个文件,例如,对于 404 错误,您将在 resources/views/errors/404.blade.php. 中创建它。 现在假设您希望在示例代码中传递一个 Not Found Error 让我们说一个函数到 return 一个 post 类别

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $count = Post::find($id)->count();

    if ($count < 1)  return abort('404', 'The post you are looking for was not found');
}

abort()方法会触发加载blade文件resources/views/errors/404.blade.php并传入第二个参数作为消息的未找到异常。您可以在 blade 文件中以

访问此消息
<h2>{{ $exception->getMessage() }}</h2>

转到此 link(官方文档)了解详细信息 https://laravel.com/docs/6.x/errors#custom-http-error-pages

首先你需要输入命令 php artisan vendor:publish --tag=laravel-errors

它将在 resources/views/errors 中创建一些错误 blade 文件,例如 404,500,403,401,419,429,503。您可以根据您的设计要求自定义这些页面。

app/Exceptions/Handler.php

public function render($request, Throwable $exception)
{
    $response = parent::render($request, $exception);
    if ($response->status() === 500) {
        return response(view('errors.500'), 500);
    }
    return $response; 
}

app/config/app.php

'debug' => (bool) env('APP_DEBUG', false)

注意:不要在视图文件夹中手动创建错误文件夹,因为某些库文件不会在供应商文件夹中创建。这是抛出错误的原因。请只使用 laravel 命令。