我想在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
<?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 视图
答案 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
进行检查