Routování a vytváření odkazů s proměnnými

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

Zdravíčko, už několik dní dumám nad routováním a pořád jsem nepřišel jak vytvořit správný Route.

$router = new RouteList;
$router[] = new Route('index.php[/<action>][/<id>]', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<username>/<presenter>[/<action>][/<id>]', 'Homepage:default');

Potřebuji, aby to propouštělo

%domain%/ → homepage:default [akce][id]
%domain%/username → homepage:default [akce][id]
%domain%/username/presenter → presenter:default [akce][id]

popřípadě

%domain%/ → homepage:default [akce][id]
%domain%/username → homepage:default [akce][id]
<presenter>.%domain%/username → presenter:default [akce][id]

mám problém s vytvářením odkazů na akce

Př.:
v HomepagePresenter mám actionOut, při volání skrze {plink Homepage:out}
Prosím vás poraďte mi, jak vkládat do plink/link proměnnou na správné místo (%domain%/username/presenter), při nejlepším, jak vytvořit správné Routy, a jak efektivněji vytvářet na ně odkazy.

Předem moc děkuji, budu rád za jakýkoliv obrat

sidrach
Člen | 23
+
-1
-

Jsem sice lama, ale nechápu moc tu konstrukci s %domain% a username. Chceš v nette obsluhovat víc domén najednou? Username v url nepotřebuješ, kdykoliv máš v nette možnost zjistit identitu uživatele přes (v presenteru):

$this->getUser();

Nepřihlášený vrátí identitu guest, přihlášený identitu. (více zde)

Jinak začal bych klidně se simplerouterem ze sandboxu, jak přidat do routy proměnnou je hezky vidět tady v routě

$route = new Route('history/<year>', 'History:view');

//v presenteru HistoryPresenter.php:

public function renderView($year){
	$this->template->year = $year;
}

//redirect by byl:

$this->redirect('History:view', array('year'=>'nejaka hodnota'));

v šabloně pak:

<a n:href="History:view parametr" target="_self" title="cosi">odkaz na historii</a>
Wailey
Člen | 48
+
0
-

Autor: Wailey

Děkuji za snahu, ale to nevyřeší můj problém.

na hostingu chci
[<subdomain>.]%domain%[/<username>][/action][/id]

subdomain – určuje presenter
username – z SEO hlediska a sdílení k identitě

Na localdomain mám vlastní verzovací systém, kde nemůžu používat subdomain,
proto řeším i routing

%domain%[/<username>][/<presenter>][/action][/id]

Nevím, jen jak na tuto strukturu generovat odkazy s proměnou uprostřed výrazu.

sidrach
Člen | 23
+
0
-

Pak bych možná část [<subdomain>.]%domain% řešil spíš přes htaccess a teprve zbytek v nette. Ale celá ta struktura je dost ufo.

nevím, jestli náhodou nejde místo klíčového slova <presenter> použít něco takového:

$route = new Route('//<subdomain>.%domain%/<action>/<id>', array(
    'presenter' => $subdomain, //asi? Nebo nějaký předklad/transformace
    'action' => 'default',
    'id' => NULL,
));

Odkazy se generují stejně, bez ohledu na to kde v masce routy jsou uvedeny parametry.

Editoval sidrach (28. 4. 2015 12:25)