parsování URL – jak získat hodnotu za lomítkem

adferg
Člen | 31
+
0
-

Ahoj, zkouším získat z url obsah za lomítkem localhost/stimtochcipracovat

Do presenteru jsem si dal:

$urlScript = new UrlScript;
$urlPath = $urlScript->getScriptPath();

a dostanu jenom

string(1) „/“

Nemůže to být tím, že jsem na localhostu? Nebo dělám něco špatně?

Marek Znojil
Člen | 82
+
+1
-

adferg napsal(a):

Ahoj, zkouším získat z url obsah za lomítkem localhost/stimtochcipracovat

Do presenteru jsem si dal:

$urlScript = new UrlScript;
$urlPath = $urlScript->getScriptPath();

a dostanu jenom

string(1) „/“

Nemůže to být tím, že jsem na localhostu? Nebo dělám něco špatně?

Ahoj,

pokud chceš parsovat url aktuálního požadavku, tak v presenteru si prvně vyžádej http požadavek:

$httpRequest = $this->getHttpRequest();

a pak si nech vrátit aktuální url požadavku jako UrlScript:

$url = $httpRequest->getUrl();

https://doc.nette.org/cs/http/request#…

dakur
Člen | 493
+
0
-

@adferg Myslím, že používáš špatnou metodu. Pod tímto odkazem, který napsal Marek, je schéma, na kterém je vidět, že různé metody vrací různé části URL. Zameřil bych se spíš na relative path či tak něco. Tady mě trochu mate ten script.php uprostřed URL, s tím jsem ještě nepracoval, tak nevím, jak se to chová, ale jinak bych použil asi getRelativePath() či getRelativeUrl(). Když zkusíš všechny, určitě na něco přijdeš. :-)

Editoval dakur (17. 12. 2020 8:00)

adferg
Člen | 31
+
0
-

Ahoj, díky. Asi jsem měl napsat, co už jsem vyzkoušel. Přes httpRequest getUrl() mi to funguje. Dostanu ale celou URL a nevím, jak se dostat jen k její části za lomítkem a pak pracovat s tím stringem

$httpRequest = $this->getHttpRequest();
$url = $httpRequest->getUrl();
bdump ($url); //vyhodí mi celou URL

$urlScript = new UrlScript;
$urlPath = $urlScript->getScriptPath();
bdump ($urlPath); //vyhodí string obsahující jen "/"
adferg
Člen | 31
+
0
-

Tak jsem na to nějak přišel. Vlastně stačí tohle:

$httpRequest = $this->getHttpRequest();
$url = $httpRequest->getUrl();
bdump ($url->path);
romanm
Člen | 27
+
0
-

Si to můžeš rovnou celé zkrátit pokud ti jde jen o URL

$this->getHttpRequest()->getUrl()->path
savalo
Člen | 11
+
0
-

Ahoj,

podle linku na dokumentaci by $this->getHttpRequest()->getUrl()->getRelativeUrl(); melo vratit i cast za kotvou, ale kdyz mam v url ?var=null#asdf tak mi to vrati jenom ?var=null bez #asdf kde je zrovna hodnota ktera by me jedina zajimala :)

Tusi nekdo cim by to mohlo byt? Pouzivam nette/http v3.2.4

mskocik
Člen | 60
+
+1
-

savalo napsal(a):

Ahoj,

podle linku na dokumentaci by $this->getHttpRequest()->getUrl()->getRelativeUrl(); melo vratit i cast za kotvou, ale kdyz mam v url ?var=null#asdf tak mi to vrati jenom ?var=null bez #asdf kde je zrovna hodnota ktera by me jedina zajimala :)

Browser na server hash neposiela. Musíš si ho tam pridať cez JS, napr. ako query paramater, alebo hidden input pri submite formulára.

savalo
Člen | 11
+
0
-

Diky za opoved, to me nenapadlo, ze kdyz to tam je jako priklad ve sloupci „Vrácená hodnota“, tak ze se to nevraci..

U me to vypada to na chybu v ty response ze serveru treti strany, cpe to tam # kdyz jsem zkusil dat misto toho ? tak to jde tahat uz v pohode bez pres getQueryParameters()

savalo
Člen | 11
+
0
-

David Grudl napsal(a):

@savalo viz https://doc.nette.org/cs/http/request#…

Tady to je, pravda, ale tam me to nenapadlo hledat.

Spis bych to upozorneni ocenil pod tabulkou v https://doc.nette.org/cs/http/urls#… pokud se nehodi kvuli prikladu mit u getteru osekanou hodnotu o ten fragment #footer