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
+
0
-

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
+
0
-

https://api.nette.org/…Control.html#…

A tenhle zápis je hezčí → [$this, 'isLinkExists']. :)

David Matějka
Moderator | 6445
+
0
-

nebo muzes predat jako dalsi argumenty:

->addRule([$this, 'isLinkExists'], 'linkExists', $form['language'])`

.. do validacni funkce to pridje jako dalsi arg

radekBrno
Člen | 61
+
0
-

Díky moc, už to funguje.