Vlastní validační pravidlo addRule – problém s předáním ostatních hodnot formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- radekBrno
- Člen | 61
Zdravím,
při přidávání sekce potřebuji zkontrolovat, zda je její URL odkaz jedinečný. Zatím jsem to vyřešil takto:
Část funkce pro vytvoření formuláře:
...
$form->addText('link', 'link')
->addRule(Form::PATTERN, 'linkOnlyCharsAndNumbers', '([A-Za-z0-9\-\_]*)')
->addRule(array($this, 'isLinkExists'), 'linkExists')
...
Funkce pro kontrolu jedinečnosti URL odkazu:
public function isLinkExists($control)
{
return !$this->sectionManager->isLinkExists($control->value, 'cs');
}
Tato verze funguje. Mám ale jeden problém. Do funkce isLinkExists potřebuji dostat hodnoty z dalších položek formuláře – jazyk a rodičovskou sekci. Dá se to nějak udělat? V záloze mám funkci onValidate, tam to určitě půjde.
A ještě jedna otázka mimo. Jaký je rozdíl mezi setRequired(‚hlaska‘) a addRule(FORM::FILLED, ‚hlaska‘)?
Díky
Editoval radekBrno (14. 3. 2017 12:53)
- Pavel Kravčík
- Člen | 1180
https://api.nette.org/…Control.html#…
A tenhle zápis je hezčí → [$this, 'isLinkExists']
. :)
- David Matějka
- Moderator | 6445
nebo muzes predat jako dalsi argumenty:
->addRule([$this, 'isLinkExists'], 'linkExists', $form['language'])`
.. do validacni funkce to pridje jako dalsi arg