CliRouter – Velmi divné chování
- nanuqcz
- Člen | 822
Ahoj,
chtěl jsem si napsat CLI aplikaci v Nette. Tak jsem napsal
$container->router[] = new CliRouter('Menus:main'); // zobrazíme Main menu (MenusPresenter:renderMain)
to mi ale vyhodilo zvláštní chybu, a tak jsem router přepsal do
array
podoby:
$container->router[] = new CliRouter(array(
'presenter' => 'menus',
'action' => 'main',
));
což vyhodilo další zajímavou chybu.
Postupným pitváním Nette jsem nakonec zjistil, že jediný způsob, jak pomocí CliRouteru vůbec spustit presenter, je tento:
$container->router[] = new CliRouter(array(
'action' => 'menus' // spustí MenusPresenter::renderMenus()
));
což mi ale přijde opravdu nelogické a zvláštní. Bylo toto chování záměr, nebo je to bug?
Editoval nanuqcz (10. 3. 2012 15:01)
- newPOPE
- Člen | 648
Tiez som skusal CLI router, dospel som k tomuto:
$container->router[] = new \Nette\Application\Routers\CliRouter(array(
'action' => 'CommandLine:default',
));
a v konzole mi to fici takto:
php index.php --action=CommandLine:foo
Pravdou je, ze mi to pride ako divne spravanie. Prehladnejsie mi pride
php index.php --presenter=CommandLine --action=foo
Editoval newPOPE (21. 4. 2012 12:19)
- Lister
- Člen | 12
Tak jsem to taky studoval, situace se mi zkomplikovala, protoze musim mit nakonec pristup i z venku i zevnitr (cli i apache). Kdyz kouknete do CliRouter, tak zjistite, jaka je syntaxe. Pri definici rout staci klasika jako simplerouter (kopiruju z kodu):
<?php
private function createCliRouter()
{
$router = new RouteList();
//default route
$router = new CliRouter(array('action' => 'Front:Login:default'));
return $router;
}
?>
POZOR Je nutne definovat default jako action kvuli
PRESENTER_KEY (viz api) vcetne Modulu i presenteru.
Samozrejme default neni povinny, je mozne zadat primo routu jako argument.
Pokud potrebujete predat nejaky argument do funkce (at uz id, nebo cokoliv jineho), je syntaxe argumentu nasledujici:
/id=5
POZOR Lomitko je nutne, CliRouter tak pozna, ze se jedna o argumenty funkce a nikoliv o adresu, jedina vyjimka je tehdy, pokud artgument obsahuje -, pak to pozna taky.
Vysledek je:
php -q index.php Front:SendArticle:default /article=5
coz je odpovidajici k adrese (s rewritem a standardnim routrem):
www.example.cz/send-article/?article=5
nebo link:
<?php
$this->link('Front:SendArticle:default', array('article' => 5));
?>
Doufam, ze to nekomu pomuze