NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Query Builder for Laravel

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 kryptomien

Odoslaní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.