Předání parametru na základě názvu Route

Allconius
Člen | 313
+
0
-

Ahoj, jde předat parametr do presenteru na základě názvu v route ? tzn. pokud je url /web/jedna/ aby se do Home předal parametr 1, /web/dve/ parametr 2 atd. ?

$router->addRoute('/web/jedna/', 'Home:menu');
$router->addRoute('/web/dve/', 'Home:menu');
$router->addRoute('/web/tri/', 'Home:menu');

nebo si jedině detekovat URL ($_SERVER[‚REQUEST_URI‘]) a zobrazovat podle toho ?

Editoval Allconius (16. 1. 11:56)

Šaman
Člen | 2635
+
0
-

To by mělo jít udělat přes routovací filtry, případně přes obecné filtry
Budeš si muset rozmyslet, jestli to chceš i pro generování adres (tedy že parametr se přeloží na /jedna), nebo to jen akceptovat na vstupu, pak si póřešíš jen FilterIn.

Edit: Resp možná by stačilo něco takového:

$router->addRoute('/web/jedna', [
	'presenter' => 'Home',
	'action' => 'menu',
	'parametr' => 1,
]);

Editoval Šaman (16. 1. 12:12)

Allconius
Člen | 313
+
0
-

Šaman napsal(a):

To by mělo jít udělat přes routovací filtry, případně přes obecné filtry
Budeš si muset rozmyslet, jestli to chceš i pro generování adres (tedy že parametr se přeloží na /jedna), nebo to jen akceptovat na vstupu, pak si póřešíš jen FilterIn.

Edit: Resp možná by stačilo něco takového:

$router->addRoute('/web/jedna', [
	'presenter' => 'Home',
	'action' => 'menu',
	'parametr' => 1,
]);

Ahoj, super, to je ono zrovna jsem to taky vygooglil, díky moc :-)

Šaman
Člen | 2635
+
0
-

A pokud bys chtěl všechny adresy /web na Home:menu, tak:

$router->addRoute('/web/<parametr>', 'Home:menu');

Akorát že parametr bude slovně jedna a budeš si to muset přeložit v presenteru.
Záleží, jestli jich bude několik málo a pro každý parametr se ti vyplatí vlastní routa, nebo radši předat parametr do presentery a tam se teprve rozhodnout jakou stránku zobrazit, případně přesměrovat na 404, pokud bude parametr nesmyslný.

Editoval Šaman (16. 1. 12:15)

Allconius
Člen | 313
+
0
-

Allconius napsal(a):

Šaman napsal(a):

To by mělo jít udělat přes routovací filtry, případně přes obecné filtry
Budeš si muset rozmyslet, jestli to chceš i pro generování adres (tedy že parametr se přeloží na /jedna), nebo to jen akceptovat na vstupu, pak si póřešíš jen FilterIn.

Edit: Resp možná by stačilo něco takového:

$router->addRoute('/web/jedna', [
	'presenter' => 'Home',
	'action' => 'menu',
	'parametr' => 1,
]);

Ahoj, super, to je ono zrovna jsem to taky vygooglil, díky moc :-)

jak pak dostanu ten parametr do presenteru pokud mám:


    public function renderMenu(): void
    {
        $data = $this->articlesData($parametr);

    }

Allconius
Člen | 313
+
0
-

Šaman napsal(a):

A pokud bys chtěl všechny adresy /web na Home:menu, tak:

$router->addRoute('/web/<parametr>', 'Home:menu');

Akorát že parametr bude slovně jedna a budeš si to muset přeložit v presenteru.
Záleží, jestli jich bude několik málo a pro každý parametr se ti vyplatí vlastní routa, nebo radši předat parametr do presentery a tam se teprve rozhodnout jakou stránku zobrazit, případně přesměrovat na 404, pokud bude parametr nesmyslný.

chci to načítat dynamicky z DB to menu podle toho příkladu zde: https://forum.nette.org/…y-z-database a předat do presenteru parametr na základě té url adresy
akorát nevím jak pak dostanu ten parametr do presenteru pokud mám:


    public function renderMenu(): void
    {
        $data = $this->articlesData($parametr);

    }

Editoval Allconius (16. 1. 12:29)

Allconius
Člen | 313
+
0
-

tak už ok je to klasicky:


    public function renderMenu($parametr): void
    {
        $data = $this->articlesData($parametr);

    }

Šaman
Člen | 2635
+
0
-

Jj, stejně, jako se v ukázkách pracuje s <id>. Je to jen název předávaného parametru, jinak to id není v routování žádné klíčové slovo nebo tak nějak.