Jednou routa funguje podruhé ne
- lopikol
- Začátečník | 75
Na stánce mám logout. Pokud použiju tuto routu:
<?php
$router[] = new Route('admin/[<presenter>/][<action>/]', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'Default',
));
?>
Končí to chybou, že nemůže nalézt LogoutPresenter.
Pokud takto, tak to funguje, ale ten link je hrozný. Poradil by mi někdo kde dělám chybu?
<?php
$router[] = new Route('admin/<presenter>/[<action>/]', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'Default',
));
?>
- Mikulas Dite
- Člen | 756
Hádám, že z toho zápisu by nebylo poznat, jestli je volitelný presenter nebo action. Když to zadáš jako
Route('admin/[<presenter>/[<action>/]]', ...
tak to funguje?
Edit: viz https://doc.nette.org/…tion/routing#…
Editoval Mikulas Dite (6. 2. 2011 19:56)
- Mikulas Dite
- Člen | 756
Tak to je ale jasný, protože tam máš defaultní hodnoty
array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'Default',
));
Jestli máš ten logout
na jiném presenteru, musíš přepsat
Homepage
na ten správný presenter. Samozřejmě potom nebude
fungovat zkracování pro Homepage
…
- Mikulas Dite
- Člen | 756
Jasný, tam ale vůbec nejde o to, kde se odkaz zobrazuje. Důležité je,
ve kterém presenteru se nachází ta funkce actionLogout
. Jestli
je to SignPresenter
, tak stačí upravit tu routu na
<?php
$router[] = new Route('admin/<presenter>/[<action>/]', array(
'module' => 'Admin',
'presenter' => /*'Homepage'*/'Sign',
'action' => 'Default',
));
?>
Jak říkám, potom ale homepage nebude hezky krátká. Co kdybys přidal routu
<?php
$router[] = new Route('admin/logout', array(
'module' => 'Admin',
'presenter' => 'Sign', // tohle upravit na presenter, ve kterém je ta logout action
'action' => 'out', // tohle upravit na název té action
));
?>
to by bylo asi nejlepší.
- lopikol
- Začátečník | 75
Mikulas Dite: Díky je mi to jasný. Tento problém budu rešit tedy vždy pokud bude action jiná než Default. Resp. musel bych si napsat pokaždé routu podobnou této:
<?php
$router[] = new Route('admin/logout', array(
'module' => 'Admin',
'presenter' => 'Sign', // tohle upravit na presenter, ve kterém je ta logout action
'action' => 'out', // tohle upravit na název té action
));
?>
Editoval lopikol (6. 2. 2011 21:32)
- Mikulas Dite
- Člen | 756
Teoreticky ne, asi by nebyl problém napsat routu, která vždy použije minimální url. Prostě by to vždy fungovalo, jako by bylo v default zrovna to, co je potřeba. A na tyhle základní hodnoty by se bral ohled jenom tehdy, byla by li ve dvou presenterech stejná akce. Pro takové url by se potom musela použít varianta s presenterem. Analogicky můžou fungovat i moduly.
- lopikol
- Začátečník | 75
Hosiplan: To neříkám, ale v adminu je potřeba plno action > musel bych mít na každou Presenter. Nechám to bejt a budu používat normální URL (i s presenterem).
Když v admin panelu chci odkázat na obsah webu (To co vidí
návštěvníci) jak to mám zapsat? Např potřebuji přesměrovat na
Article:Default
.
Děkuji za odpověd.
- Mikulas Dite
- Člen | 756
<a n:href=":Front:Article:default">odkaz na front</a>
:
– absolutní cestaFront
– název modulu, který „vidí návštěvníci“Article
– okdefault
– je konvence psát action camelCase, ale to je už detail
Editoval Mikulas Dite (7. 2. 2011 20:48)
- Mikulas Dite
- Člen | 756
https://doc.nette.org/…n/presenters#… Je to jedno, ale:
Běžně se modul a presenter píše PascalCase, camelCase jsou právě action. Btw v posledním postu jsem si popletl case, tak jsem to tam opravil.
Editoval Mikulas Dite (7. 2. 2011 20:50)