routování události na komponentu

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

Mám v presenteru zaregistrovanou komponenut loginForm, která má subkomponentu inForm pro simplerouter

$router[] = new SimpleRouter('Admin:default');

je vše O.K. a url
http://127.0.0.1:8080/…a.pythia.cz/?…
se přepošle na událost do loginForm. Jakmile ale chci použít router, tak se neustále spouští action actionDefault()

$router[] = new Route('admin/<action>', array(
            'presenter' => 'Admin'
            , 'action' => 'default'
    ));

vygeneruje se url
http://127.0.0.1:8080/…ia.cz/admin/?…
ale ta událost se do loginForm nikdy nepředá.
Jinak loginForm i inForm jsou vytvořeny pomocí továrny a

$this->template->loginForm = $this['loginForm'];

v actionDefault metodě presenteru AdminPresenter (pro loginForm)

Ondřej Mirtes
Člen | 1536
+
0
-

Zkuste přesunout to plnění šablony do renderDefault, v actionDefault je na to IMHO brzo a do šablony se nestihne promítnout provedení události, které následuje až po action metodě.

Nebo můžete plnění šablony plně zrušit a v ní místo nějakého {$loginForm} zavolat {control loginForm}.

jannemec
Člen | 78
+
0
-

@LastHunter
jj, {control loginForm} používám,
$this->template->loginForm = $this[‚loginForm‘]; jsem zakomentoval, ale pořád to samé – SimpleRouter O.K., s Router bez úspěchu :-(

jannemec
Člen | 78
+
0
-

Opravdu nikoho nic nenapadá – zdá se, že komponenty jsou ve stromu zadefinovány korektně – znovu podotýkám, že se SimpleRoute vše chodí a událost se pošle do komponenty. Ale jakmila nahradím SimpleRoute za Route (viz výše), tak to tu událost nikam nepošle … jakoby nenašel co má dělat při /admin/?do=loginForm-inForm-submit

jannemec
Člen | 78
+
0
-

A ještě jedna věc pro pobavení … na produkčním serveru to funguje i s normálním Route

jannemec
Člen | 78
+
0
-

Tak po těžkém boji … mod_rewrite jsem měl v tom adresáři na lokálu vypnut … proto Route nefungoval. Ale dík všem za postrkování, byl to boj.
Jinak nešlo by doplnit checker.php o varování, jestli je mod_rewrite zapnut?

Ondřej Mirtes
Člen | 1536
+
0
-

No, tos mohl poznat podle X-Powered-By hlavičky, že tam není Nette Framework. Anebo řetězcem Nette Framework pod čarou výpisu chyby Not Found :)

Sám to mám v bootstrapu ošetřené takto, ale na jednom hostingu mi to hází false, i když mod_rewrite funguje (že by tam nebyl Apache, ale nějaký jiný server?):

$router = $application->getRouter();
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
    require_once(APP_DIR . '/routes.php');
} else {
	$router[] = new SimpleRouter(array(
		'module' => 'Web',
		'presenter' => 'Default',
		'action' => 'default',
	));
}