错误处理器Laravel中的访问请求对象

ru9i0ody  于 2023-06-24  发布在  其他
关注(0)|答案(3)|浏览(92)

在我的Laravel 5.2项目中,我有一个中间件,可以很好地存储对数据库或文件的请求和响应。在那里我序列化/json_encode $request对象,用于记录所有发生的事情。(cookies,input,files,header...)
我需要创建一个错误处理程序,将使用整个请求对象,包括到报告电子邮件请求的一切。但是ExceptionHandler::report()不接受Request作为参数。

vsnjm48y

vsnjm48y1#

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);
}
svdrlsy4

svdrlsy42#

在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);
    }

更多信息在这里。

zsbz8rwp

zsbz8rwp3#

我尽量不使用帮助器方法,坚持纯OOP。在HanderReport函数中,您可以使用container发出请求

$request = $this->container->make(Request::class);
use Illuminate\Http\Request;

相关问题