如何在Laravel中捕获PostTooLargeException?

don*_*ona 0 php error-handling post laravel

要重现错误,只需上传一个文件(S)在Laravel任何邮路超出post_max_size你的php.ini配置.

我的目标是简单地捕获错误,以便我可以通知用户他上传的文件太大.说:

public function postUploadAvatar(Request $request)
  try {
    // Do something with $request->get('avatar')
    // Maybe validate file, store, whatever.
  } catch (PostTooLargeException $e) {
    return 'File too large!';
  }
}
Run Code Online (Sandbox Code Playgroud)

以上代码在标准Laravel 5(PSR-7)中.它的问题是一旦注入的请求发生错误,该函数就无法执行.从而无法在功能内捕获它.那么如何抓住呢?

Rwd*_*Rwd 7

Laravel使用它的ValidatePostSize中间件来检查post_max_size的要求,然后抛出PostTooLargeException,如果CONTENT_LENGTH请求的太大.这意味着异常如果在它到达你的控制器之前抛出的方式.

你可以做的是render()在你的App\Exceptions\Handler例子中使用这个方法

public function render($request, Exception $exception)
{
    if ($exception instanceof PostTooLargeException) {

        return response('File too large!', 422);
    }

    return parent::render($request, $exception);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须从此方法返回响应,您不能只从控制器方法返回一个字符串.

上面的回答是复制return 'File too large!';你在问题中的示例,你可以明显地将其改为其他东西.

希望这可以帮助!