Neznáme parametre a chyby
Požiadavka na filter alebo triedenie mimo allow-listu vyhodí UnknownFilter alebo UnknownSort. Obe dedia zo Symfony HttpException so stavom 400, takže ich Laravel vykreslí ako bežnú HTTP chybu:
GET /posts?filter[secret]=1
HTTP/1.1 400 Bad Request
{"message": "Requested filter(s) `secret` are not allowed. Allowed filter(s) are `status, title`."}Režim ignore
Nastavte mode.unknown_filter alebo mode.unknown_sort na ignore a problematický kľúč sa potichu zahodí — použijú sa len povolené. Reťazec triedenia, ktorý sa zahodí celý, sa správa, akoby chýbal, takže stránku stále zoradí defaultSort(). Iná hodnota ako reject či ignore vyhodí InvalidConfigurationException namiesto hádania:
// config/query-builder.php
'mode' => [
'unknown_filter' => 'ignore', // drop un-allow-listed filters
'unknown_sort' => 'reject', // keep sorts strict (HTTP 400)
],Hlášky a preklady
Hlášky pochádzajú z query-builder::errors.unknown_filter a query-builder::errors.unknown_sort so zástupnými symbolmi :unknown a :allowed. Odrazené neznáme kľúče sú obmedzené — prvých 5, každý skrátený na 64 znakov, s dovetkom „…and N more“ — takže kľúče od útočníka nezaplavia odpoveď ani logy. Publikujte preklady, ak chcete zmeniť znenie alebo pridať jazyk:
// lang/vendor/query-builder/sk/errors.php
return [
'unknown_filter' => 'Filtre :unknown nie sú povolené. Povolené filtre: :allowed.',
'unknown_sort' => 'Triedenia :unknown nie sú povolené. Povolené triedenia: :allowed.',
];Prehľad výnimiek
| Výnimka | Kedy sa vyhodí |
|---|---|
UnknownFilter | Požadovaný kľúč filtra nie je v allow-liste (režim reject). Symfony HttpException, stav 400. |
UnknownSort | Požadovaný kľúč triedenia nie je v allow-liste (režim reject). Symfony HttpException, stav 400. |
UnsupportedOperator | Filter je deklarovaný s operátorom, ktorý nevie vykonať. LogicException — chyba vývojára, vyhodí sa pri vytvorení filtra. |
AllowListAlreadyApplied | allowedFilters(), allowedSorts() alebo defaultSort() sa zavolá až potom, čo request aplikovalo preposlané volanie buildera. LogicException — chyba vývojára, nikdy ju nevyvolá request. |
QueryBuilderException | Značkovacie rozhranie, ktoré implementujú všetky štyri — zachyťte ho a pokryjete celú rodinu. |
use RoundlyConsulting\QueryBuilder\Exceptions\QueryBuilderException;
try {
$posts = QueryBuilder::for(Post::class, $request)
->allowedFilters('status')
->get(); // filters apply here — lazily
} catch (QueryBuilderException $e) {
// UnknownFilter / UnknownSort — both carry HTTP status 400
}Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.