Ověřování je důležitou součástí každé aplikace. Zajišťuje, že data, která aplikace zpracovává, jsou přesná, spolehlivá a bezpečná. V systému Laravel je proces validace bezproblémový, výkonný a snadno implementovatelný. Mezi různými funkcemi, které Laravel nabízí, je validace polí jednou z nejužitečnějších, ale někdy nepochopených funkcí. V této příručce se ponoříme do hloubky validace polí v systému Laravel a vysvětlíme ji způsobem, který je vhodný pro začátečníky.
Co je validace pole v Laravelu?
Validace polí v systému Laravel umožňuje validovat vstupy, které jsou strukturovány jako pole. To je užitečné zejména při práci s formuláři nebo rozhraními API, která přijímají více vstupů pod jedním názvem pole, jako např:
- Seznam e-mailových adres.
- Sbírka možností produktů.
- Sada nahraných souborů.
Vezměme si například scénář, kdy potřebujete ověřit více telefonních čísel zadaných uživatelem jako jeden vstup. Validace polí v systému Laravel to nejen umožňuje, ale také zjednodušuje.
Základní ověření pole
Začněme jednoduchým příkladem. Předpokládejme, že máte formulářové pole s názvem items[] kde mohou uživatelé odeslat seznam položek. Chcete-li tento vstup ověřit, můžete v kontroléru zadat validační pravidlo takto:
use Illuminate\Http\Request; public function store(Request $request){ $request->validate([ 'items' => 'required|array', ]); // Proceed with storing or processing the valid data.}
Tohle je to, co to dělá:
required: Zajišťujeitemsje v požadavku přítomno pole.array: Zajišťuje, aby hodnotaitemsje skutečně pole.
Ověřování prvků v poli
Co když chcete ověřit každý prvek v rámci souboru items pole? Chcete například zajistit, aby každá položka byla řetězcem o maximální délce 50 znaků. Laravel vám k tomu umožňuje použít tečkovou notaci:
$request->validate([ 'items' => 'required|array', 'items.*' => 'string|max:50',]);
Vysvětlení:
items.*: Zaměřuje se na každý prvekitemspole.string: Zajistí, aby každý prvek byl řetězec.max:50: Omezí délku každého řetězce na 50 znaků.
Pokud uživatel odešle neplatné pole, Laravel vrátí chybu validace s uvedením problematického prvku, např. items.2 must not exceed 50 characters.
Ověřování polí s klíči
V některých případech mohou mít pole specifické klíče, které je třeba ověřit. Například:
$request->validate([ 'products' => 'required|array', 'products.*.name' => 'required|string', 'products.*.price' => 'required|numeric|min:0',]);
Děje se toto:
products: Zajišťujeproductspole je pole.products.*.name: Zajišťuje, aby každý výrobek mělnamepole, které je povinným řetězcem.products.*.price: Zajišťuje, aby každý výrobek mělpricepole, které je povinným číslem větším nebo rovným 0.
Příklad vstupu:
[ 'products' => [ ['name' => 'Laptop', 'price' => 1200], ['name' => 'Mouse', 'price' => 25] ]]
Zpracování chyb validace
Pokud validace selže, Laravel automaticky přesměruje uživatele zpět na předchozí stránku s chybami validace. Tyto chyby můžete zobrazit v šablonách Blade pomocí příkazu $errors variabilní:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div>@endif
To umožňuje intuitivní způsob, jak informovat uživatele o případných problémech s jejich vstupem.
Vlastní pravidla ověřování pro pole
Někdy vestavěná validační pravidla nestačí a je třeba implementovat vlastní logiku. Laravel to usnadňuje tím, že umožňuje definovat vlastní pravidla:
-
Vytvořte vlastní pravidlo pomocí příkazu
php artisanpříkaz:php artisan make:rule ValidPhoneNumber -
Implementujte logiku do vygenerovaného souboru pravidel:
namespace App\Rules;use Closure;use Illuminate\Contracts\Validation\ValidationRule;class ValidPhoneNumber implements ValidationRule{public function validate(string $attribute, mixed $value, Closure $fail): void{// Example: Check if the value matches a phone number patternif(!preg_match('/^\+?[0-9]{10,15}$/', $value)) {$fail('Invalid phone number format.');}}public function message(){return 'The :attribute must be a valid phone number.';}} -
Použijte vlastní pravidlo při ověřování:
use App\Rules\ValidPhoneNumber;$request->validate(['contacts.*.phone' => ['required', new ValidPhoneNumber()],]);
Ověřování vnořených polí
Hluboce vnořená pole můžete validovat pomocí tečkové notace. Například:
$request->validate([ 'teams' => 'required|array', 'teams.*.members' => 'required|array', 'teams.*.members.*.name' => 'required|string', 'teams.*.members.*.role' => 'required|string',]);
Příklad vstupu:
[ 'teams' => [ [ 'members' => [ ['name' => 'Alice', 'role' => 'Developer'], ['name' => 'Bob', 'role' => 'Designer'] ] ] ]]
Tipy a osvědčené postupy
- Plánování pravidel ověřování: Před psaním pravidel si promyslete strukturu dat a požadavky na validaci.
- Použití vlastních zpráv: Přizpůsobte chybové zprávy pro lepší uživatelskou zkušenost.
$request->validate(['items.*' => 'string|max:50',], ['items.*.max' => 'Each item must not exceed 50 characters.',]);
- Využití vlastních pravidel: Pro složité scénáře vytvářejte opakovaně použitelná vlastní pravidla, aby byl kód čistý.
- Otestujte své ověření: Vždy testujte různé scénáře, abyste se ujistili, že validace funguje podle očekávání.
Závěr
Ověřování polí v systému Laravel je výkonná funkce, která zjednodušuje práci se složitými datovými strukturami. Pochopením základů a prozkoumáním pokročilých případů použití můžete zajistit, aby vaše aplikace efektivně zpracovávaly validaci dat a poskytovaly lepší uživatelský komfort. Ať už pracujete s jednoduchými seznamy, nebo s hluboce vnořenými poli, validační nástroje Laravelu vám pomohou.