Vlastní validační pravidlo
Laravel umožňuje si velmi jednoduše vytvořit vlastní validační pravidlo. V tomto článku si ukážeme, jak si vytvořit nové pravidlo pro kontrolu velkých písmen z requestu.
Mějme primitivní příklad, kdy potřebujeme zkontrolovat, že uživatel v textovém poli napsal vše velkými písmeny. Jako první si tedy vytvoříme samotnou třídu s pravidlem:
php artisan make:rule UpperCase
Tím se nám vygeneroval soubor app/Rules/UpperCase.php
s již předdefinovanými metodami. Do metody passes()
přidáme naši požadovanou validační logiku:
public function passes($attribute, $value): bool
{
return strtoupper($value) === $value;
}
Není to žádná raketová věda, hodnotu z requestu upravíme pomocí metody strtoupper()
a porovnáme jestli jsou shodné. Návratová hodnota z metody musí být tedy true
/false
. Dále si upravíme metodu message()
:
public function message(): string
{
return 'The :attribute must be uppercase.';
}
Tato zpráva se automaticky vrátí v případě, že validace neprojde. Zpráva se tradičně uloží do MessageBag
, takže ji lze klasicky vypsat v šabloně.
Validace ve Form Requestu
V případě větší logiky by se měla validace odseparovat do vlastní třídy - form requestu. Zde naše nové validační pravidlo aplikujeme takto:
use App\Rules\UpperCase;
//...
public function rules()
{
return [
'sentence' => ['required', 'max:255', new UpperCase()]
];
}
Validace v controlleru
Pokud máme velmi jednoduchý formulář s jednoduchou logikou, můžeme validaci zavolat rovnou v controlleru:
use App\Rules\UpperCase;
//...
public function store(Request $request)
{
$request->validate([
'sentence' => ['required', 'max:255', new UpperCase()]
]);
}