Formuláře – validace

Validační pravidla je nutné přidat po definici vlastních vstupních prvků. Validační pravidla definuje vždy v závislosti na jednotlivý prvek pomocí metody addRule(). Argumenty metody:

  • $rule – validační pravidlo
  • $arg – validační argument; nepovinný
  • $message – chybová hláška; nepovinný

Validační argument využijete jen u některých validačních pravidel, například pokud porovnáváte shodu, délku apod. Háefko má také pro pozitivní validování předkonfigurované chybové hlášky. Ovšem v angličtině.

$form['age']->addRule(Rule::INTEGER, null, 'Věk musí výt zadán jako číslo');

$form['pass']->addRule(Rule::EQUAL, $form['pass2'], 'Hesla se musejí rovnat.');

Při přidávání validačních pravidel můžeme také pomocí ~ vložit jejich negaci: ~Rule::FILLED, ~Rule::EQUAL. Pokud používáte textové názvy validačních pravidel, pak použijte vykřičník: '!filled'.

Přidání validačních podmínek

Často potřebujete vstup od uživatele validovat jen za určité podmínky. K tomu slouží metoda addCondition(). Argumenty metody:

  • validační pravidlo
  • nepovinný validační argument

Metoda vrací objekt Condition, na která můžete opět volat metodu addRule a navíc také addRuleOn, která přidá validační pravidlo na jiný vstupní prvek.

$form['url']->addCondition(Form::FILLED)
            ->addRule(Form::URL, null, 'Zadejte validní URL adresu.')

$form['email']->addCondition(~Form::FILLED)
              ->addRuleOn($form['url'], Form::FILLED, null, 'Zadejte email, nebo URL.');

Seznam validačních pravidel

Validační konstanta Validuje Je prázdná hodnota nevalidní? Argument je
Rule::EQUAL rovnost objekt ($form['...']) nebo hodnota
Rule::FILLED vyplnění ano
Rule::INTEGER zda je celé číslo ano
Rule::FLOAT zda je desetinné číslo ano
Rule::LENGTH délku vstupu číslo (více níže)
Rule::RANGE číselný rozsah ano pole o dvou prvcích
Rule::URL validní url adresu ano
Rule::EMAIL validní e-mail ano
Rule::CALLBACK validuje callbackem callback
Rule::REGEXP rovnost vůči reguláru regulární výraz

Validace délky

Specifickou záležitostí je validace délky vstupu. V příkladu níže vidíte uzpůsobení pravidla pro potřeby validace.

$form['surname']->addRule(Rule::LENGTH, '>10', 'Jméno musí být delší než 10 znaků');
$form['surname']->addRule(Rule::LENGTH, '<10', 'Jméno musí být kratší než 10 znaků');
$form['surname']->addRule(Rule::LENGTH, '10', 'Jméno musí mít 10 znaků');