Problém s routováním

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

Zdravím,
nevěděl by prosím někdo jak snadno vytvořit routu pro:

https://doc.nette.org/cs/             → View:default, id="dokumentace"
https://doc.nette.org/cs/?action=Edit → Edit:default, id="dokumentace"

..toto jsem našel ve článku víceúrovňové routy
..přijde mi zbytečné kvůli takové „na první pohled blbosti“ psát vlastní router, ale opravdu nevím jak tohoto výsledku jinak docílit. Na svém webu bych potřeboval přesně tento tvar routy. V aplikaci zatím používám:

<?php
$router[] = new Route('<id> ? <action>', array(
	'presenter' => 'View',
	'action'    => 'Default',
        'id'        => NULL,
));
?>

..to však neobslouží změnu presenteru. Slovně řečeno podmínka by měla znít takto: „Nastav presenter na hodnotu View, když action je v url nastaveno“.

Editoval Vyki (30. 7. 2009 1:10)

Jod
Člen | 701
+
0
-

Lepšie bude mať jeden presenter Default a akcie View a Edit. Jedna to tak každý robí a aj routovanie je hračka.
Fakt to daj do jedného presenteru, ak nato nemáš nejaký smrtelný dôvod mať to v dvoch :D:D:D

pmg
Člen | 372
+
0
-
$router[] = new Route('<id> ? action=<presenter>', array(
	'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));
Vyki
Člen | 388
+
0
-

Jod napsal(a):

Lepšie bude mať jeden presenter Default a akcie View a Edit. Jedna to tak každý robí a aj routovanie je hračka.
Fakt to daj do jedného presenteru, ak nato nemáš nejaký smrtelný dôvod mať to v dvoch :D:D:D

Smrtelný důvod rozhodně ne, ale spíše bezpečnostní :o) Snažím se v aplikaci striktně odlišit zabezpečenou část od té nezabezpečené. V rom presenteru edit mám ve startup ověření zda je člověk přihlášen. Kdybych to měl v jednom presenteru s View, musel bych u každého citlivého render, action.. ověřovat zda je uživatel přihlášen. Přijde mi lepší mít tuto administrační část oddělenou v jiném presenteru. Nebyl by ještě jiný způsob jak dosáhnout tohoto členění?

Vyki
Člen | 388
+
0
-

pmg napsal(a):

$router[] = new Route('<id> ? action=<presenter>', array(
	'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));

Nemělo by to být spíše? :

<?php
$router[] = new Route('<id> ? presenter=<action>', array(
 	'presenter' => 'Default',
 	'action' => 'default',
	'id' => NULL,
));
?>

Netuším.. jdu to testnout

Editoval Vyki (30. 7. 2009 1:47)

pmg
Člen | 372
+
0
-

Jen jsem tam místo presenteru View dal Default. Potvrzuju, že jsem ho myslel přesně tak, jak jsem napsal. Věř tomu nebo ne, sám jsem řešení před uveřejněním otestoval. :-)

Vyki
Člen | 388
+
0
-

pmg napsal(a):

Jen jsem tam místo presenteru View dal Default. Potvrzuju, že jsem ho myslel přesně tak, jak jsem napsal. Věř tomu nebo ne, sám jsem řešení před uveřejněním otestoval. :-)

A jak potom bude vypadat link?
pro view zrejme takto: <a href="{plink Default:default, $id}" class="pap">{$treename}</a>
a pro ten edit presenter: <a href="{plink Edit:default, $id}" class="pap">{$treename}</a> ????

Vyki
Člen | 388
+
0
-

WOOOOW.. fakt to funguje přesně s těmito linky. Díky moc. Ušětřil jsi mi probdělé ráno :D

pmg
Člen | 372
+
0
-

To se ti zdá tak moc jednodušší se zeptat než to prostě zkusit?

Dobře, v šabloně presenteru stačí používat link místo plink, a pokud je view default, lze ho vynechat. Když si v té routě změníš výchozí presenter na View, nemusíš používat nicneříkající Default, to jsem tam omylem změnil.

{link View:, $id}
Vyki
Člen | 388
+
0
-

pmg napsal(a):

To se ti zdá tak moc jednodušší se zeptat než to prostě zkusit?

Dobře, v šabloně presenteru stačí používat link místo plink, a pokud je view default, lze ho vynechat. Když si v té routě změníš výchozí presenter na View, nemusíš používat nicneříkající Default, to jsem tam omylem změnil.

{link View:, $id}

Jsem to samozřejmě otestoval, jenom mi to kvůli drobnosti neběhalo. Ten plink tam mám kvůli tomu, že menu generuji ve zvláštním controlu. Jinak díky moc

pmg
Člen | 372
+
0
-

Aha, tak to potom ano, rád jsem pomohl.