use Illuminate\Auth\AuthenticationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
+use Illuminate\Http\Exceptions\PostTooLargeException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
*/
public function render($request, Throwable $e)
{
+ if ($e instanceof PostTooLargeException) {
+ $e = new NotifyException(trans('errors.server_post_limit'), '/', 413);
+ }
+
if ($this->isApiRequest($request)) {
return $this->renderApiException($e);
}
*/
protected function isApiRequest(Request $request): bool
{
- return strpos($request->path(), 'api/') === 0;
+ return str_starts_with($request->path(), 'api/');
}
/**
'cannot_get_image_from_url' => 'Cannot get image from :url',
'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
+ 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.',
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
// Drawing & Images
namespace Tests;
+use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
use Illuminate\Support\Facades\Log;
class ErrorTest extends TestCase
$resp->assertStatus(404);
$resp->assertSeeText('Image Not Found');
}
+
+ public function test_posts_above_php_limit_shows_friendly_error()
+ {
+ // Fake super large JSON request
+ $resp = $this->asEditor()->call('GET', '/books', [], [], [], [
+ 'CONTENT_LENGTH' => '10000000000',
+ 'HTTP_ACCEPT' => 'application/json',
+ ]);
+
+ $resp->assertStatus(413);
+ $resp->assertJson(['error' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.']);
+ }
}