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

validationRule() zostaví reťazec pravidla in:... z values() — z hodnôt backed enumu, pri čistom enume z názvov prípadov — takže zoznam povolených hodnôt sa pri zmene prípadov nikdy nerozíde s kódom:

$request->validate([
    'category' => ['required', NewsCategory::validationRule()],
]);
// validationRule() === 'in:hot-news,regular-news,private-news'

Vo form requeste

namespace App\Http\Requests;

use App\Enums\NewsCategory;
use Illuminate\Foundation\Http\FormRequest;

final class StoreArticleRequest extends FormRequest
{
    /**
     * @return array<string, array<int, string>>
     */
    public function rules(): array
    {
        return [
            'title' => ['required', 'string', 'max:255'],
            'category' => ['required', NewsCategory::validationRule()],
        ];
    }
}

Po validácii je isté, že hodnota patrí existujúcemu prípadu, takže natívne from() výnimku nevyhodí:

public function store(StoreArticleRequest $request): RedirectResponse
{
    $article = Article::create([
        'title' => $request->validated('title'),
        'category' => NewsCategory::from($request->validated('category')),
    ]);

    return to_route('articles.show', $article);
}

Polia hodnôt

Pri zozname hodnôt použite pravidlo na každý prvok:

$request->validate([
    'categories' => ['required', 'array'],
    'categories.*' => [NewsCategory::validationRule()],
]);

Čo obsahuje pravidlo

  • Pravidlo tvorí in: a hodnoty z values() spojené čiarkami — pre celočíselný enum 'in:0,5,10'. Pravidlo in v Laraveli porovnáva reťazce, takže vstup z formulára ako '5' prejde.
  • Na čistom enume vznikne z názvov prípadov — 'in:Active,Archived' — a prijme presne tieto názvy.
  • Laravel číta zoznam späť ako CSV, preto hodnotu, ktorá by túto syntax narušila — prázdnu, s čiarkou alebo začínajúcu úvodzovkou — dá do úvodzoviek a vnútorné úvodzovky zdvojí. Ostatné hodnoty zostanú bez úvodzoviek.
  • Pravidlo odovzdajte ako prvok poľa, ako vyššie, a nie vo vnútri reťazca pravidiel oddelených znakom |.
use RoundlyConsulting\Enums\Helpers;

enum Separator: string
{
    use Helpers;

    case Comma = 'a,b';
    case Plain = 'c';
}

Separator::validationRule(); // 'in:"a,b",c'

Hodnoty so spätnou lomkou

CSV parser Laravelu v úvodzovkách ponechá spätnú lomku aj znak za ňou bez zmeny, preto sa hodnota so spätnou lomkou v úvodzovkách zapíše tak, aby sa prečítala správne: úvodzovka hneď za spätnou lomkou sa nezdvojí a koncové spätné lomky sa presunú tesne za zatváraciu úvodzovku, kde ich parser k hodnote stále pripojí:

enum Fragment: string
{
    use Helpers;

    case TrailingBackslash = 'C:\a,b\\';   // C:\a,b\
    case EscapedQuote = 'x\"y,z';          // x\"y,z
    case Plain = 'z';
}

Fragment::validationRule(); // 'in:"C:\a,b"\,"x\"y,z",z'

Pri každej hodnote sa overí, že sa prečíta späť bez zmeny. Ak by to niekedy neplatilo, validationRule() vyhodí EnumException::valueNotRepresentable(), namiesto toho, aby vrátila pravidlo prijímajúce nesprávny vstup. V PHP 8.4 žiadna taká hodnota známa nie je — ak sa vyskytne, validujte taký enum cez Rule::enum().

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.