Validacia iba ak bola zadana hodnota
- Dendy
- Člen | 8
Zdravim Vas,
nemozem to nikde najst ako validovat iba ak bola zadana hodnota. Mozno som to niekde prehliadol :(
Mam jednoduchy form:
<?php
...
$form->addText("admin_email", "Správcovský email:")
->addRule(Form::EMAIL, 'Zadajte email v spravnom formate') ;
...
?>
A chcem aby bolo mozne odoslat formulat bez toho aby bola polozka
vyplnena. Ale ak to uzivatel vyplni, nech to zvaliduje.
Teraz to funguje tak, ze mi nedovoli odoslat prazdny formular.
Dakujem za rady.
- sKopheK
- Člen | 207
Asi jsme se špatně pochopili, zkusím to na příkladu.
Políčko „Typ zákazníka“ může nabývat hodnot fyzická, nebo
právnická osoba. Pokud je vybrána fyzická osoba, neúspěšná validace
následujícího pole „Jméno“ zobrazí zprávu „Zadejte vaše jméno.“.
Pokud je vybrána právnická osoba, bude při nezadaném jméně zobrazena
hláška „Zadejte jméno vaší firmy.“.
- CZechBoY
- Člen | 3608
Pokud máš jen 2 možný hodnoty tak by to šlo přes addCondition, ale lepší by asi bylo udělat vlastní validační funkci.
1. možnost addCondition
$typ = $form->addSelect('typ', ['f', 'p']);
$form->addText('name')
->addConditionOn($typ, Form::EQUAL, 'f')
->addRule(Form::FILLED, 'Zadejte vaše jméno')
->addConditionOn($typ, Form::EQUAL, 'p')
->addRule(Form::FILLED, 'Zadejte jméno firmy');
2. možnost vlastní validační funkce
$form->addSelect('typ', ['f', 'p']);
$form->addText('name');
$form->onValidate[] = [$this, 'validateName'];
function validateName(Form $form)
{
$name = $form->getComponent('name');
if (trim($name->getValue()) !== '') {
return true;
}
$typ = $form->getComponent('typ');
$errorMsg = 'Zadejte jméno.';
if ($type === 'f') {
$errorMsg = 'Zadejte vaše jméno.';
} elseif ($typ->getValue() === 'p') {
$errorMsg = 'Zadejte jméno firmy.';
}
$name->addError($errorMsg);
return false;
}
Editoval CZechBoY (24. 4. 2016 22:37)