检测特定异常Laravel 5.1
首先,我想捕获abort 403错误,我认为它会抛出AccessDeniedHttpException,所以我尝试像这样捕获错误检测特定异常Laravel 5.1,laravel,laravel-5,Laravel,Laravel 5,首先,我想捕获abort 403错误,我认为它会抛出AccessDeniedHttpException,所以我尝试像这样捕获错误 <?php namespace App\Exceptions; use Exception; use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Compon
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Event;
use App\Events\UserNotAllowed;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
HttpException::class,
ModelNotFoundException::class,
AccessDeniedHttpException::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)
{
return 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 ($e instanceof AccessDeniedHttpException) {
Event::fire(new UserNotAllowed($request));
return redirect()->to("/home");
}
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
}
return parent::render($request, $e);
}
public function render($request, Exception $e)
{
// Or ===
if ($e->getStatusCode() == 403) {
Event::fire(new UserNotAllowed($request));
return redirect()->to("/home");
}
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
}
return parent::render($request, $e);
}
但在执行此操作时,所有其他错误页面都无法正常工作,在我的webrowser中出现了500个一般错误
有没有一种简单的方法可以在不更改Laravel的整个src abort函数的情况下侦听或捕获错误?您可以在异常处理程序中使用报告方法,如下所示:
您可以在异常处理程序中使用report方法,如下所示:
是否有特定的需要?我想知道用户何时尝试访问他们不允许访问的页面。是否有特定的需要?我想知道用户何时尝试访问他们不允许访问的页面。不,这是可行的,但您应该在中止中定义错误类型。使用中止(404)。我已经更新了答案以满足您的需要。abort()需要一个参数,因此abort()只会引发另一个异常。是的。。。可以这样做,但我不是说找不到页面(404),而是访问被拒绝(403)。所以当有人试图访问一个不存在的页面时,它不会填满那些拼写错误的人的无用日志。我不确定,你想达到什么目的,但不管是哪种异常类型,它都能工作。您只需要知道异常类型。对于403,类型为HttpException。您也可以通过statusCode进行检查,我将更新答案以显示。不,它可以工作,但您应该在中止中定义错误类型。使用中止(404)。我已经更新了答案以满足您的需要。abort()需要一个参数,因此abort()只会引发另一个异常。是的。。。可以这样做,但我不是说找不到页面(404),而是访问被拒绝(403)。所以当有人试图访问一个不存在的页面时,它不会填满那些拼写错误的人的无用日志。我不确定,你想达到什么目的,但不管是哪种异常类型,它都能工作。您只需要知道异常类型。对于403,类型为HttpException。您也可以通过statusCode进行检查,我将更新答案以显示这一点。
public function report(Exception $e)
{
if ($e instanceof HttpException) {
echo $e->getStatusCode();
}
return parent::report($e);
}