Presenter: vždycky routuje na Presenter:default

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

Mám problém s routováním na default action, měl jsem za to, že Presenter: by mělo routovat na default action, která je nastavená u daného presenteru v routeru. Ale místo toho se vždycky routuje na Presenter:default. Nastavení routeru je následující, chtěl bych, aby Sluzby: routovalo na Sluzby:corporateIdentity, ale není tomu tak. Nette verze 1.0 build ced2e04.

<?php
$router = $application->getRouter();

$router[] = new Route('index.php', array(
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('sluzby/<action>', array(
	'presenter' => 'Sluzby',
	'action' => 'corporateIdentity',
));

$router[] = new Route('<presenter>/<action>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
));
?>
Foowie
Člen | 269
+
0
-

Presenter: vytvoří odkaz na akci default a s routováním nemá nic společného.

Mikulas Dite
Člen | 756
+
0
-

Vážně? Já bych také čekal default jako to, co je nastavené v patřičné routě. Jestli to tak není, jaké to má využití?

Honza Kuchař
Člen | 1662
+
0
-

To je správně. Potom by routy mohly změnit fci aplikace. Což je nepřípustné. Když vytváříš link, vytváříš ho nezávisle na routě a routa mu jen udá tvar. Ty výchozí hodnoty se použijí při vstupu, tedy při zadání adresy uživatelem.

sairon
Člen | 32
+
0
-

>Foowie: Jasně, psal jsem to ve spěchu a špatně jsem to formuloval, když jsem mluvil o routování, myslel jsem zpracování odkazu.
Moje navazující otázka tedy je – dá se docílit toho, aby se link Presenter: zpracoval jinak než jako Presenter:default?

jasir
Člen | 746
+
0
-

zkus nějak čarovat tady
https://api.nette.org/…ter.php.html#44

Foowie
Člen | 269
+
0
-

Asi nejčistší by byl přepsat všechny odkazy :) Ale pokud se Ti to nechce přepisovat a ani si hrát s nastavením $defaultAction tak v metodě actionDefault proveď redirect. (Pokud ta akce neobsluhuje POST) Sice to nebude takové úplně nejlepší, ale proč ne ;)

jasir
Člen | 746
+
0
-

Ono se možná nabízí otázka, k čemu to vlastně potřebuješ…

pekelnik
Člen | 462
+
0
-

Docela to chápu. Také jsem už několikrát měl nutkání udělat něco jako $presenter->setDefaultAction(‚dancing‘).

No nakonec jsem vždycky použil akci default. Ono je to tak nějak nejjednodušší.

dá se docílit toho, aby se link Presenter: zpracoval jinak než jako Presenter:default?

Toho bych se nerad nadál.

Pak je tady ještě Presenter::$defaultAction – což je ovšem statická proměnná a tedy „application scope“