ErrorHandler Laravel中的访问请求对象

6
在我的Laravel 5.2项目中,我有一个中间件可以愉快地将请求和响应存储到数据库或文件中。在那里,我对$request对象进行序列化/ json_encode以记录发生的所有事情。(cookies、输入、文件、头文件...) 我需要创建一个错误处理程序,它将使用整个请求对象将关于请求的所有内容包括在报告电子邮件中。但是ExceptionHandler::report()不接受请求作为参数。
3个回答

6

Laravel 5.2提供了辅助方法request(),适用于以下情况:

/**
 * Report or log an exception.
 *
 * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
 *
 * @param  \Exception  $exception
 * @return void
 */
public function report(Exception $exception)
{
    $request = request();

    parent::report($exception);
}

2
在App\Exceptions\Handler.php文件中,有一个render方法,该方法具有请求参数。在此处,您可以触发一个事件,将内容存储在会话或数据库中。
例如:
public function render($request, Exception $e)
    {
        if ($e instanceof HttpException) {
            if ($e->getStatusCode() == 403) {
                Event::fire(new UserNotAllowed($request));
                return redirect()->to("/home");
            }
            if ($e->getStatusCode() == 404) {
                if (Auth::guest()) {
                    return redirect()->to("/");
                }
            }
        }
        if ($e instanceof ModelNotFoundException) {          
            $e = new NotFoundHttpException($e->getMessage(), $e);
        }
        return parent::render($request, $e);
    }

more info here.


将异常呈现为HTTP响应。这就是描述所说的内容。使用“render”来执行此操作是否符合原理? - hctopcu
这将是您在错误处理程序中捕获请求的唯一方式。 - Joost

0
我尽量不使用辅助方法,坚持纯面向对象编程。在HanderReport函数中,你可以使用容器来进行请求。
$request = $this->container->make(Request::class);

use Illuminate\Http\Request;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接