vlastní validace háže „Unknown operation“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
castamir
Člen | 629
+
0
-

Nějaký důvod, proč následující ukázka z dokumentace:

// uživatelský validátor: testuje, zda je hodnota dělitelná argumentem
function divisibilityValidator($item, $arg)
{
    return $item->value % $arg === 0;
}

$form->addText('number', 'Číslo:')
    ->addRule('divisibilityValidator', 'Číslo musí být dělitelné %d.', 8);

háže: Nette\InvalidArgumentException
Unknown operation ‚divisibilityValidator‘ for control ‚number‘. ?

Editoval castamir (23. 5. 2012 15:24)

frosty22
Člen | 373
+
0
-

V dokumentaci to je ona funkce definovaná v globálním scope, předpokládám že ty asi tu funkci máš jako metodu objektu presenteru, což poté musíš mít callback takto:

$form->addText('number', 'Číslo:')
    ->addRule(callback($this, "divisibilityValidator"), 'Číslo musí být dělitelné %d.', 8);

Případně můžeš i mít:

$form->addText('number', 'Číslo:')
    ->addRule(function ($item, $arg)
	{
 	   return $item->value % $arg === 0;
	}, 'Číslo musí být dělitelné %d.', 8);

Editoval frosty22 (24. 5. 2012 0:08)

castamir
Člen | 629
+
0
-

Díky. Tohle bych doporučoval hodit do doku…

Aearsis
Člen | 57
+
0
-

Ono to tam je – PHP: Callbacks

castamir
Člen | 629
+
0
-

Myslel jsem do dokumentace tady na nette, zápis

$form->addText('number', 'Číslo:')
    ->addRule(callback($this, "divisibilityValidator"), 'Číslo musí být dělitelné %d.', 8);

považuju za lepší příklad použití, než

$form->addText('number', 'Číslo:')
    ->addRule('divisibilityValidator', 'Číslo musí být dělitelné %d.', 8);

protože metoda divisibilityValidator se velmi pravděpodobně bude nacházet ve stejné třídě, tako komponenta formuláře.

frosty22
Člen | 373
+
0
-

Akorát v dokumentaci je to myšleno v globálním kontextu a váže se na globální funkci, nikoliv uvnitř třídy.