Validácia hodnôt filtrov
Zoznamový endpoint zvyčajne validuje, čo môže filter obsahovať — Rule::in(), integer, uuid — aby preklep skončil užitočnou chybou 422, nie potichu prázdnym zoznamom. Keď filter prijíma operátory, tieto pravidlá začnú odmietať samotný formát: gte:500 nie je integer a not:debug nie je platná úroveň. Pravidlo FilterValue odstráni prefix operátora a sentinely a na zvyšok spustí vaše pôvodné pravidlá:
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use RoundlyConsulting\QueryBuilder\Concerns\HasPageSize;
use RoundlyConsulting\QueryBuilder\Enums\RequestedOperator;
use RoundlyConsulting\QueryBuilder\Rules\FilterValue;
use RoundlyConsulting\QueryBuilder\Support\FilterSentinel;
final class ListLogsRequest extends FormRequest
{
use HasPageSize;
public function rules(): array
{
return [
...$this->pageSizeRules(),
'filter.level' => ['nullable', new FilterValue(Rule::enum(LogLevel::class))],
'filter.code' => ['nullable', new FilterValue('integer', operators: [
RequestedOperator::GreaterThanOrEqual,
RequestedOperator::LessThan,
])],
'filter.project' => ['nullable', new FilterValue('uuid', sentinels: [FilterSentinel::NONE])],
];
}
}
// ?filter[level]=not:debug → passes (debug is a LogLevel case)
// ?filter[code]=gte:500 → passes
// ?filter[code]=gte:garbage → 422 with the endpoint's own "integer" message
// ?filter[project]=none → passes (the sentinel is skipped)Zodpovedajúce filtre v controlleri:
->allowedFilters(
AllowedFilter::operators('level', [RequestedOperator::Not]),
AllowedFilter::operators('code', [RequestedOperator::GreaterThanOrEqual, RequestedOperator::LessThan]),
AllowedFilter::nullable('project', 'project_id', FilterValueShape::Uuid),
)Možnosti pravidla
new FilterValue($rules, ?array $operators = null, array $sentinels = [], bool $partialByDefault = false):
- $rules — pravidlá, ktoré by platili pre samotnú hodnotu: reťazec pravidiel, zoznam alebo objekt pravidla. Endpoint si ponechá vlastné hlášky aj názvy atribútov.
- operators — tokeny, ktoré deklaroval filter. Predvolene dvojica rovnosti (is, not); porovnávací alebo čiastočný filter to musí uviesť výslovne.
- sentinels — rezervované hodnoty, na ktoré odpovedá sám filter, napríklad FilterSentinel::NONE, ktoré by pravidlá stĺpca inak odmietli.
- partialByDefault — zrkadlí príznak filtra; určuje, ktorý operátor znamená samotná hodnota, a ten sa odstráni vždy.
Odovzdajte tie isté operátory a sentinel, aké deklaroval filter — obe polovice tvoria jednu deklaráciu. Validuje sa každá položka hodnoty oddelenej čiarkami alebo poľa (multi-select ich posiela viac), najviac limits.max_filter_values.
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.