routování události na komponentu
- jannemec
- Člen | 78
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
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
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
- Ondřej Mirtes
- Člen | 1536
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',
));
}