flarum/framework · error · BadRequestException
filter must be an array
Error message
filter must be an array
What it means
Guard in RequestUtil::extractFilter: the 'filter' query parameter must be an object/array of filter criteria (e.g. ?filter[author]=...). If a client sends filter as a scalar string, it cannot be mapped to filterable query keys, so a 400 BadRequestException is thrown.
Solutions
- Send filters in object form: ?filter[q]=term or ?filter[author]=1
- Do not send ?filter=scalarValue
- Fix the client query serialization so filter is always a keyed object
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at framework/core/src/Http/RequestUtil.php:227 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/2c66b9ccda535c4c.
Report an issue: GitHub.
Appendix: source
Thrown at framework/core/src/Http/RequestUtil.php:227
}
$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)) {
throw new BadRequestException('filter must be an array');
}
return $filter;
}
public static function extractFields(Request $request, ?array $available = null): array
{
$fields = $request->getQueryParams()['fields'] ?? [];
if (! is_array($fields)) {
throw new BadRequestException('fields must be an array');
}
if ($available !== null) {
$invalid = array_diff(array_keys($fields), $available);
if (count($invalid)) {
throw new BadRequestException('Invalid fields ['.implode(',', $invalid).']');View on GitHub (pinned to 4b939f6853)