Zapsání routy tak aby se v url vypustil nazev presenteru i action

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

Ahoj, potřeboval bych poradit. Již si nějaký čas s nette „hraju“ ale routování je pro mě zatím španělská vesnice. Potřeboval bych poradit jak a kam přesně (myslím tím pořadí rout) zapsat takovou routu, abych místo adresy domena.cz/magazine/article/url-clanku mel adresu pouze domena.cz/url-clanku

Diky moc za pomoc

Tom

newPOPE
Člen | 648
+
0
-

proste len vypusti z patternu <presenter>/<action> a nechaj tam len <url>

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

?>
Neklan
Člen | 21
+
0
-

no mam to takhle, ale nefunguje to, lepe receno url toho clanku to vygeneruje spravne, ale ostatni stranky nejdou

<?php
$router[] = new Route('<pk>', array(
                'presenter'     => 'Magazine',
                'action'        => 'show'
        ));
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);


$router[] = new Route('<presenter>/<action>[/<pk>][/<url>]', 'Homepage:default');
?>
assassik
Člen | 43
+
0
-

Čim více obecná routa, tim musí být blíže ke konci.

„<pk>“ v podstatě vyhový všechno proto se požadavek na nějakou jinou stránku nedostane tam kam má.

<?php
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);


$router[] = new Route('<presenter>/<action>[/<pk>][/<url>]', 'Homepage:default');

$router[] = new Route('<pk>', array(
                'presenter'     => 'Magazine',
                'action'        => 'show'
        ));
?>

PS: používej RoutingPanel v debugBaru ;)

Editoval assassik (4. 5. 2011 15:06)

OK3
Člen | 91
+
0
-

Nebo může být i vejš, ale pak je potřeba upřesnit regulárem, aby chytala jen určitý tvar url..?

Neklan
Člen | 21
+
0
-

assasik → no takhle jak jsi to napsal tak sice stranky fungujou, ale zas to hazi ten tvar domena.cz/magazine/show/url-clanku

asi neco delam blbe :-D

Aurielle
Člen | 1281
+
0
-

Adresa se ti matchne na obecnou routu a na tvoji specifickou už nedojde. Pomocí FILTER_IN/OUT můžeš parametr odmítnout, to bych viděl jako řešení. Je to tu někde rozepsané.

Neklan
Člen | 21
+
0
-

hm, tak to vypadalo ze tomu zacinam rozumet, ale po posledni rade jsem opet mimo misu :) muzes sem hodit odkaz kde to je rozepsane? diky

Neklan
Člen | 21
+
0
-

Nenašel jsem nikde popsane to FILTER_IN/OUT, mohli byste mi nekdo poradit jak to tedy zapsat ty routy?
diky

Aurielle
Člen | 1281
+
0
-

Lehký nástřel – pokud se hodnota najde třeba v databázi, routa ji propustí, pokud ne, přejde se na další routu. Pomocí FILTER_OUT můžeš upravit chování při generování odkazů, například parametr id nahrazovat seo-friendly hodnotou z databáze (a ve FILTER_IN zase převádět zpět na ID).

$router[] = new Route('<pk>', array(
	'presenter' => '...',
	'action' => '...',
	'pk' => array(
		Route::FILTER_IN => function($value) {
			if(\MyApp\PkModel::findBySlug($value))
				return $value;

			return NULL;
		},
	),
));