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


how do I create custom error page in laravel 5

我想在我的Laravel 5应用程序中显示自定义错误页面;例如任何用户类型的URL,如CCD_ 1(错误)但CCD_。

默认错误显示为:

哦,出了问题!错误代码:500

但相反,我想显示我的自定义视图

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

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

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'errors'404.blade.php创建了一个错误视图,但404.blade.php仍然没有加载。

Im使用Laravel 6.4,为此,您可以创建自定义错误页面刀片文件,剩下的工作由Laravel完成。在项目目录中运行以下命令

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

这将在resources/views/errors/.中创建刀片文件,例如在resources/views/errors/404.blade.php.中有404错误。现在假设您希望在示例代码中传递Not Found Error,例如返回后类别的函数

/**
 * 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()方法将触发加载刀片文件resources/views/errors/404.blade.php并将第二个参数作为消息传入的未找到异常。您可以作为访问刀片文件中的此消息

<h2>{{ $exception->getMessage() }}</h2>

有关详细信息,请访问此链接(官方文档)https://laravel.com/docs/6.x/errors#custom-http错误页面

谢谢大家,现在它正在成功工作,

我只是更改了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''errors''404.blade.php 上创建一个错误视图

首先需要键入命令php手工厂商:发布--tag=laravel错误

它将在资源/视图/错误中创建一些错误刀片文件,如404500403401419429503。您可以根据自己的设计要求自定义这些页面。

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 5.5:-中对我有效

/config/contents.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?>