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()]
    ]);
}