Použití rout mimo aplikaci

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

Z administrace, která není udělaná v Nette (využívá Adminer Editor) se chci odkazovat do Nette aplikace. Administrace běží úplně jinde (pod HTTPS a na jiné doméně), ale má přístup k definici rout.

Dá se metodě IRouter::constructUrl() nějak podstrčit, že má URL vytvářet z jiného základu? Následující kód vrátí nesmysl (http://localhostmember/default/1/).

<?php
$httpRequest = new HttpRequest;
$httpRequest->setUri(new UriScript("http://localhost/app/index.php"));
echo $router->constructUrl(new PresenterRequest("Member", "default", array("id" => 1)), $httpRequest);
?>

Navíc mi kód přijde hrozně krkolomný. Mě by úplně stačila metoda, která vrátí jen relativní cestu, základ už si k ní doplním sám. Mám pro to připravený patch, ale než ho zveřejním, tak se chci ujistit, že jsem něco nepřehlédl.

David Grudl
Nette Core | 8218
+
0
-

Tohle jsou už trošku archaické základy Nette. Asi by stačilo, aby constructUrl() jako druhý parametr bralo objekt Uri/UriScript namísto HttpRequest (je to teda BC break).

Naopak vracení absolutních URL je potřeba, tak by se měl router z principu chovat.

ps. UriScript v sobě rozlišuje ještě pozici baseUri, takže by to asi mělo fungovat s nastavením

$uri->setScriptPath('/app/index.php');

Je pravda, že tohle by se mohlo už nastavit automaticky v konstruktoru.

vrana
Člen | 131
+
0
-

BC break si udělej sám :-). Já bych pouze druhý parametr udělal volitelný s tím, že pokud nepřijde, tak se vrátí pouze relativní cesta.

S tím setScriptPath to skutečně funguje, ale krkolomnost už mi přijde nesnesitelná.

David Grudl
Nette Core | 8218
+
0
-

Úkolem constructUrl() je vrátit plnou URL – tohle bych velmi nerad měnil, celá aplikace se na to spoléhá. Věc by se dala zjednodušit do

$router->constructUrl(
	new PresenterRequest("Member", "default", array("id" => 1)),
	new Uri("http://localhost/app/index.php")
);

tím, že by druhým parametrem nebyl HttpRequest ale UriScript a vytvořením konstruktoru pro UriScript.

(ačkoliv relativní URL by pak mohl vracet relativní new Uri('/'))

vrana
Člen | 131
+
0
-

Dobře, to mi vyhovuje. Mám to udělat?

David Grudl
Nette Core | 8218
+
0
-

Vyzkoušet to ;-)

vrana
Člen | 131
+
0
-

Jé, díky! Myslel jsem, že to znamená mírně urážlivé „vyzkoušet to udělat“ a ono to je přitom milé „vyzkoušet to použít“ :-). Funguje to pěkně.