flarum/framework · error · BadRequestException
include must be a string
Error message
include must be a string
What it means
Guard in RequestUtil::extractInclude: the 'include' query parameter (comma-separated relationship paths for eager loading) must be a plain string. If a client sends ?include[]=foo style array params, the value cannot be split into paths and a 400 BadRequestException is thrown.
Solutions
- Send include as one string: ?include=user,posts.user
- Avoid array-style include[] parameters
- Fix the client's query builder so it joins include paths with commas
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at framework/core/src/Http/RequestUtil.php:208 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/e17dfc7ea1a5cb38.
Report an issue: GitHub.
Appendix: source
Thrown at framework/core/src/Http/RequestUtil.php:208
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;
}
public static function extractInclude(Request $request, ?array $available): array
{
$include = $request->getQueryParams()['include'] ?? '';
if (! is_string($include)) {
throw new BadRequestException('include must be a string');
}
$includes = array_filter(explode(',', $include));
$invalid = array_diff($includes, $available);
if (count($invalid)) {
throw new BadRequestException('Invalid includes ['.implode(',', $invalid).']');
}
return $includes;
}
public static function extractFilter(Request $request): array
{
$filter = $request->getQueryParams()['filter'] ?? [];
if (! is_array($filter)) {View on GitHub (pinned to 4b939f6853)