Použití rout mimo aplikaci
- vrana
- Člen | 131
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
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.
- David Grudl
- Nette Core | 8218
Ú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('/')
)