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

时间:2015-02-24 06:40:33

标签: php

我想在laravel 5应用中显示自定义错误页面。 例如任何用户类型网址,例如 http://www.app.com/url123 (错误) 但 http://www.app.com/url (右)

默认错误显示为:

  呃哦,出了点问题!错误代码: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 \ errors \ 404.blade.php

但仍未加载我的 404.blade.php 视图

4 个答案:

答案 0 :(得分:5)

谢谢你们,    现在它正在成功运作,

我只是更改了 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

上创建错误视图

答案 1 :(得分:4)

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

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

这将在resources/views/errors/.中创建刀片文件,例如,对于404错误,您将在resources/views/errors/404.blade.php.中拥有它。 现在,假设您希望在示例代码中传递未找到错误,让我们说一个返回帖子类别的函数

/**
 * 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-error-pages

答案 2 :(得分:0)

这在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?>

答案 3 :(得分:0)

在偶然的机会下,您会想到如何在php laravel应用程序上制作自定义错误页面(例如403、500、502、504、404、405、408),然后就可以有效地执行它,而不会出现任何问题。您可以在laravel venture中普遍设置自定义错误页面。如果您需要将404页设置为自定义错误页,那您就可以毫无问题地做到这一点。

app / Exceptions / Handler.php

namespace App\Exceptions;

 

use Exception;

use Illuminate\Validation\ValidationException;

use Illuminate\Auth\Access\AuthorizationException;

use Illuminate\Database\Eloquent\ModelNotFoundException;

use Symfony\Component\HttpKernel\Exception\HttpException;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

 

class Handler extends ExceptionHandler

{

 

/**

* A list of the exception types that should not be reported.

*

* @var array

*/

protected $dontReport = [

AuthorizationException::class,

HttpException::class,

ModelNotFoundException::class,

ValidationException::class,

];

 

/**

* Report or log an exception.

*

* This is a great spot to send exceptions to Sentry, Bugsnag, etc.

*

* @param \Exception $e

* @return void

*/

public function report(Exception $e)

{

parent::report($e);

}

 

/**

* Render an exception into an HTTP response.

*

* @param \Illuminate\Http\Request $request

* @param \Exception $e

* @return \Illuminate\Http\Response

*/

public function render($request, Exception $e)

{

if($this->isHttpException($e)){

if (view()->exists('errors.'.$e->getStatusCode()))

{

return response()->view('errors.'.$e->getStatusCode(), [], $e->getStatusCode());

}

}

return parent::render($request, $e);

}

}

您可以从here

进行检查