作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要重现错误,只需将超过 php.ini
配置中的 post_max_size
的文件上传到 Laravel 中的任何 POST 路由。
我的目标是简单地捕获错误,以便通知用户他上传的文件太大。说:
public function postUploadAvatar(Request $request)
try {
// Do something with $request->get('avatar')
// Maybe validate file, store, whatever.
} catch (PostTooLargeException $e) {
return 'File too large!';
}
}
以上代码在标准的 Laravel 5 (PSR-7) 中。它的问题是,一旦注入(inject)的请求发生错误,该函数就无法执行。因此无法在函数内捕获它。那么如何捕捉呢?
最佳答案
Laravel 使用它的 ValidatePostSize
中间件来检查请求的 post_max_size
然后抛出 PostTooLargeException
如果 CONTENT_LENGTH
请求太大。这意味着异常在到达您的 Controller 之前就已抛出。
您可以在 App\Exceptions\Handler
中使用 render()
方法,例如
public function render($request, Exception $exception)
{
if ($exception instanceof PostTooLargeException) {
return response('File too large!', 422);
}
return parent::render($request, $exception);
}
请注意,您必须从此方法返回一个响应,您不能像从 Controller 方法那样只返回一个字符串。
上面的响应是复制 return 'File too large!';
你在你的问题的例子中,你显然可以把它改成别的东西。
希望这对您有所帮助!
关于php - 如何在 Laravel 中捕获 PostTooLargeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42883154/
我是一名优秀的程序员,十分优秀!