Přesměrování ven z jakékoliv URL

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

Zdravim,
chtel bych udelat v route presmerovani na externi URL. Co jsem se tu docetl, lze pouzit micropresenter. Problem mam ze nevim jak napsat routu tak, aby mi do ni padalo jakekoliv url. Tedy neco takoveho:

<?php
		$router[] = new Route('cokoliv', function ($presenter) {
			//... najdu co kam presmerovat
			return $presenter->redirectUrl($url);
		});
?>

Diky za rady.

Barbarossa
Člen | 74
+
+1
-

Nechal bych tu masku prázdnou, pokud tam není definována jiná routa. Spíše bych ale volil postup, kdy budeš ty masky využívat (s využitím reg výrazů si nadefinuješ různé parametry URL apod).

<?php
$router[] = new Route('', function ($presenter) {
	$request = $presenter->getRequest(); // https://doc.nette.org/cs/http/request#toc-http-pozadavek
	return $presenter->redirectUrl($url);
});
?>
tomlp79
Člen | 23
+
0
-

To ale nefunguje :) zadna url tam neprojde. Radeji upresnim o co mi jde. Mam v db tabulku presmerovani stara ⇒ nova url. Stara url pritom muze mit jakykoliv tvar a nova zrovna tak.
Nejdriv jsem myslel ze udelam nejakou routerFactory ktera implementuje IRoute a v metode match to vsechno poresim… pak jsem ale narazil na to ze match ma vracet application request kde prvni parameter je presenter. Ten ja ale obecne neznam, protoze, jak uz jsem psal, nova url muze mit jakykoliv tvar, i externi url napr.

diky.

David Matějka
Moderator | 6445
+
0
-

muzes vratit request na ten micro presenter, viz https://api.nette.org/…ute.php.html#132

tomlp79
Člen | 23
+
0
-

Ja se omlouvam asi jsem fakt tupej, ale mohl bys mi prosim napsat jak to udelat? Mam z methody match vratit Nette\Application\Request ? Co dam do jejich argumentu?

David Matějka
Moderator | 6445
+
0
-

Ano, Nette\Application\Request. jako name tam dej Nette:Micro a do parametru dej jeden parameter callback se stejnou closure, co mas v tom prvnim prispevku

tomlp79
Člen | 23
+
+1
-

tak mozna uz jsem na to prisel, je to ok?

<?php
		return new Nette\Application\Request(
			'Nette:Micro',
			null,
			['callback' => function($presenter) {
				return $presenter->redirectUrl('http://www.google.cz',301);
			}]
		);
?>
David Matějka
Moderator | 6445
+
0
-

@tomlp79 ano :)