Jednou routa funguje podruhé ne

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lopikol
Začátečník | 75
+
0
-

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
+
0
-

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)

lopikol
Začátečník | 75
+
0
-

Mikulas Dite: Bohužel. Ten link je úplně stejný jako když jsem použil tu druhou routu.

Mikulas Dite
Člen | 756
+
0
-

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

lopikol
Začátečník | 75
+
0
-

Odkaz na logout je v @layout, aby byl dostupný všude.
Rád bych aby ten link byl místo http://127.0.0.1/admin/homepage/logout/ tento http://127.0.0.1/admin/logout/

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

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
+
0
-

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.

Filip Procházka
Moderator | 4668
+
0
-

PresenterLogout::actionDefault/admin/logout ?

lopikol
Začátečník | 75
+
0
-

Hosiplan: To bych to musel dát do jiného presenteru.

Ted mám actionLogout v PresenterHomepage.

Filip Procházka
Moderator | 4668
+
0
-

a v čem je problém? neumíš snad používat copy & paste?

lopikol
Začátečník | 75
+
0
-

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
+
0
-
<a n:href=":Front:Article:default">odkaz na front</a>
  • : – absolutní cesta
  • Front – název modulu, který „vidí návštěvníci“
  • Article – ok
  • default – je konvence psát action camelCase, ale to je už detail

Editoval Mikulas Dite (7. 2. 2011 20:48)

lopikol
Začátečník | 75
+
0
-

Děkuji. Byl jsem blízko. Chyběla mi první :

Když napíši Default, tak je to špatně? Nebo je jedno, zda použiju Default/default.

Editoval lopikol (7. 2. 2011 19:30)

Mikulas Dite
Člen | 756
+
0
-

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)