Při volání vlastní validační funkce nelze použít self::

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Šaman
Člen | 2666
+
0
-
<?php
$form->addText('input')
	->addRule(Form::INTEGER, 'Částka smí obsahovat jen číslice.')
	->addRule('self::myValidateFce', 'Částka přesahuje povolený limit.');
?>

mi vyhodí výjimku: Unknown operation 'self::myValidateFce' for control 'input'.
Když self přepíšu na název třídy, šlape to. Ale než jsem na to přišel, docela to trvalo..

Používám Nette Framework 1.0-dev (revision e6eaa61 released on 2010-05-01). (Jen takový nápad: nemohla vy se verze Nette ukazovat na debugBaru? Případně dá se zjistit pomocí nějaké fce frameworku?)

Aurielle
Člen | 1281
+
0
-

Verzi obsahují konstanty Framework::VERSION a Framework::REVISION

Ondřej Mirtes
Člen | 1536
+
0
-

self:: – to není žádná chyba Nette, PHP prostě neumožňuje sapsat callback v tomto tvaru :)

Šaman
Člen | 2666
+
0
-

Aha.. Njn, budu si to pamatovat, díky.

v6ak
Člen | 206
+
0
-

Ono to je celkem logické – předává se to jako řetězec a volá se to (obecně) dost možná hodně mimo místo vzniku. Aby něco takového mohlo fungovat, muselo by si PHP ke každému řetězci, který alespoň trochu připomíná callback a používá self, ukládat třídu, odkud pochází, což by byl IMHO dost velký hack. Už stačí současný systém callbacků – mnohem více by se mi líbilo něco stylu ClassName::MethodName::methodLink apod.

Jinak, pokud se chceš vyhnout závislosti na jméně třídy, použij __CLASS__.