Tvoření linku

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

Ahoj lidi , mam problém
Když volám ve stejném Modulu třeba Auth:login, normálně se vytvoří odkaz, přesměruje, apod.
ale když zavolám v jiném modulu :Front:Auth:login tak vyhodí výjimku že neexistuje routa, poté jsem vyzkoušel :Front:Auth:prihlasit-se a již to jelo.

routa vypadá takto:

Route::setStyleProperty('action', Route::FILTER_TABLE, array(
        'prihlasit-se' => 'login',
        'odhlasit-se' => 'logout',
        'registrovat-se' => 'registration',
        'zmena-udaju' => 'change'
));
// ... dalsi routy
$router[] = new Route('<action prihlasit-se|odhlasit-se|registrovat-se|zmena-udaju>', array(
	'module' => 'Front',
    'presenter' => 'Auth'
));
// ... dalsi routy

Mám podezření na chybu v nette a nebo je to chyba u mě ?

Edit: bral jsem informace z https://doc.nette.org/…n/presenters a

‚AnotherModule:Presenter:action‘ (odkaz do jiného modulu)

skončilo totálně špatně

Editoval sodae (14. 5. 2009 19:16)

kravčo
Člen | 721
+
0
-

Chyba je u teba – Nette ťa na ňu dokonca upozornilo ;). Neexistuje routa pre :Front:Auth:login.

V tvojej route máš vymenovaný zoznam povolených reťazcov na mieste akcie pre prezenter :Front:Auth a login medzi nimi nie je. Ak potrebuješ, aby ti fungovali i anglické ekvivalenty, budeš ich musieť do routy doplniť, alebo vymenovanie vynechať a to čo ním riešiš riešiť inak.

$router[] = new Route('<action prihlasit-se|login|odhlasit-se|logout|registrovat-se|registration|zmena-udaju|change>', array(
	'module' => 'Front',
	'presenter' => 'Auth',
));
// poprípade
$router[] = new Route('<action>', array(
	'module' => 'Front',
	'presenter' => 'Auth',
));

Edit: bral jsem informace z https://doc.nette.org/…n/presenters a

‚AnotherModule:Presenter:action‘ (odkaz do jiného modulu)

skončilo totálně špatně

Skončilo to len inak, ako by si očakával. V dokumentácii je nepresnosť, odkaz do iného modulu (rovnocenného s tým aktuálnym) treba písať „absolútne“:

:AnotherModule:MyPresenter:action
sodae
Nette Evangelist | 250
+
0
-

dobře ale je tam Route::FILTER_TABLE, takže by to mělo používat také ty z filtru, když už to funguje z vnitřního okruhu (presenter)

kravčo
Člen | 721
+
0
-

Routa funguje ako regulárny výraz, ktorý matchuje reťazec URL, takže ten tvoj zápis proste odkaz na :Front:Auth:login nematchne. Myslím, že je to očakávané správanie…

To, že požiadavky na :Front:Auth:prihlasit-se sa až po matchnutí interne prevedú na :Front:Auth:action sa deje až po routovaní, resp. v jeho poslednej fáze.

_Martin_
Generous Backer | 679
+
0
-

Teda pánové, co je to za nesmysl? Přeci při vytváření odkazů nemám brát v potaz překladový slovník pro routy. Tady musí být něco špatně

sodae
Nette Evangelist | 250
+
0
-

_Martin_: takže mam pravdu ?, je to chyba v nette, jinak jestli ti to jde , tak klidně pošlu kod aplikace na mail

_Martin_
Generous Backer | 679
+
0
-

sodae napsal(a):

_Martin_: takže mam pravdu ?, je to chyba v nette, jinak jestli ti to jde , tak klidně pošlu kod aplikace na mail

Mě to jede normálně, odkazy :Front:Auth:Login, routa <presenter>/<action prihlasit-se|default>/<id> a překladový slovník

Route::setStyleProperty('action', Route::FILTER_TABLE, array(
	'prihlasit-se' => 'login',
));

A vše chodí, jak má (revize 311).

sodae
Nette Evangelist | 250
+
0
-

_Martin_: jestli sis nevšiml mam tam v routě login a ne prihlasit-se

_Martin_
Generous Backer | 679
+
0
-

sodae napsal(a):

_Martin_: jestli sis nevšiml mam tam v routě login a ne prihlasit-se

Kde je v této routě login a ne prihlasit-se?

sodae napsal(a):

routa vypadá takto:

// ... dalsi routy
$router[] = new Route('<action prihlasit-se|odhlasit-se|registrovat-se|zmena-udaju>', array(
	'module' => 'Front',
    'presenter' => 'Auth'
));
// ... dalsi routy

Vážně ti teď nerozumím.

sodae
Nette Evangelist | 250
+
0
-

_Martin_: teď se opravdu omlouvám : D , jsem byl roztržitý, doopravdy ti funguje tvorba odkazů , zajímavé jdu to ještě obhlídnout
Edit: omlouvám se, jednalo se o velké a malé písmeno, topic tedy lze uzavřít, dík Martine že jsi to vyzkoušel