Vlastní validace nestaticky a chyba z validatoru
- Jiří Nápravník
- Člen | 710
Potřebuji validaci, kdy zkontroluji, zda v textu není některé ze zákazaných slov v databázi. Jde to přes onValidate samozřejmě. Ale vzhledem k tomu, že to použiji na dvou místehc, bylo by vhodnější vlastní validační pravidlo. Jde to nějak? Co jsem koukal, tak všechny ukázky jsou jedině přes statiku, což se mi moc nechce, vzhledem k tomu, že potřebuji injektnout databázi apod.
A druhá věc potřebuji také dostat z té validace zpět, která ta slova jsou závádná. Jde to vůbec, aby se to pak vypsalo z toho validátoru do chybové hlášky? Třeba i v případě closure v addRule?
- Pavel Kravčík
- Člen | 1196
Do add rule se dá vložit callback, to nestačí?
Zpětné posílání by se možná dalo vyřešit manuálním vykreslením té části, něco jako tohle:
$form->addRule(function($control){
$array = $this->Model->checkWords($control->value);
if($array)
{
foreach($array as $error) //error je například "zend" nebo "symfony"
{
$form['component']->addError($error);
}
}
});
// A v manuálním vykreslení si jednoduše zkontroluješ, co má komponenta za chyby.
{foreach $form['component']->errors as $error}
<span class="form-error">Slovo $error nelze použít</span>
{/foreach}
- CZechBoY
- Člen | 3608
Tak mělo by jít přidat klasický pravidlo. Já to používám třeba pro validaci hesla.
protected function createComponentForm()
{
$form = new Form;
$form->addIp('abc')
->addRule([$this, 'validatePassword'], 'špatný heslo', $this->userIdentity->username);
}
public function validatePassword(TextInput $pwdInput, $username = null)
{
if ($pwdInput->getValue() === 'tajneheslo' && $username === 'tajneheslo') {
return true;
}
$pwdInput->addError('Heslo "' . $pwdInput->getValue() . '" je špatné pro uživatele "' . $username . '".');
return false;
}