flarum/framework · error · BadRequestException

page[number] must be at least 1

Error message

page[number] must be at least 1

What it means

Guard in RequestUtil::extractOffsetFromNumber: when the client paginates with page[number], the page must be >= 1 (pages are 1-indexed). A page[number] of 0 or negative cannot be converted to an offset, so a 400 BadRequestException is thrown.

Solutions

  1. Use page[number] >= 1 (the first page is 1, not 0)
  2. Or paginate by page[offset] >= 0 instead
  3. Fix off-by-one client pagination logic that starts at page 0
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at framework/core/src/Http/RequestUtil.php:182 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of flarum/framework@4b939f6853 (2026-09-15). Data as JSON: /api/errors/68a072ebe7f28d2c. Report an issue: GitHub.

Appendix: source

Thrown at framework/core/src/Http/RequestUtil.php:182

        }

        if ($max !== null) {
            $limit = min($limit, $max);
        }

        if ($limit < 1) {
            throw new BadRequestException('page[limit] must be at least 1');
        }

        return $limit;
    }

    public static function extractOffsetFromNumber(Request $request, int $limit): int
    {
        $page = (int) ($request->getQueryParams()['page']['number'] ?? 1);

        if ($page < 1) {
            throw new BadRequestException('page[number] must be at least 1');
        }

        return ($page - 1) * $limit;
    }

    public static function extractOffset(Request $request, ?int $limit = 0): int
    {
        if ($request->getQueryParams()['page']['number'] ?? false) {
            return self::extractOffsetFromNumber($request, $limit);
        }

        $offset = (int) ($request->getQueryParams()['page']['offset'] ?? 0);

        if ($offset < 0) {
            throw new BadRequestException('page[offset] must be at least 0');
        }

        return $offset;

View on GitHub (pinned to 4b939f6853)