URL : getQueryParameters doesn't work
- Reka
- Member | 19
Hello,
My link takes this form :
http://localhost/nette/www/subscription/confirmation/id=67&conf=565185338
To generate that URL, I used the function “setQuery” with success :
$confirm_parameters = [array];
$url = $this->httpRequest->getUrl()->setQuery($confirm_parameters);
Conversely, I am unable to get the parameters I set (in the same presenter) :
Below, you will find my several attempts and their results :
dump($this->httpRequest->getUrl()->getPathInfo());
Result :
"subscription/confirmation/id=67&conf=565a315c05338" (50)
dump($this->httpRequest->getUrl()->getQueryParameters());
Result :
array ()
[empty]
dump($this->httpRequest->getUrl()->getQuery());
Result :
""
[nothing]
I read this page and this one at least 20 times, but apparently sth goes wrong :/
Could you show me how to catch the values of “id” and “conf” which appear in my link, please?
Thank you in advance and have a nice weekend.
Last edited by Reka (2015-11-29 00:37)
- Reka
- Member | 19
Such a responsiveness !
Thank you for this help.
With the $id and $conf parameters as arguments of my method
“actionConfirmation”, I still get an array empty, and then with the “?”
in the URL, I get this error :
Possible problem: you are sending a HTTP header while already having some data in output buffer. Try Tracy\OutputDebugger or start session earlier.
Do I forget something else ? Do I make another mistake ?
What am I supposed to do ?
Edit : is the “?” necessary? I see the common url display the
page's extension (.php) :
page.php?param1=valeur1¶m2=valeur2¶m3=valeur3¶m4=valeur4
Is it impossible to catch the args with a path like mine?
/confirmation/id=...&conf=...
If it is, how is it possible to generate this kind of url
(.php?param=...
) with Nette?
Last edited by Reka (2015-11-29 02:05)
- Jan Tvrdík
- Nette guru | 2595
Nette\Http\Request
is immutable (you can't change it once it has
been created); getUrl()
returns clone of the URL
- Reka
- Member | 19
Ok thanks a lot, I understand.
I will try the solution purposed by Czechboy, I haven't generated my URL like
this at all(1). It was undeniably an error.
(1)
$url = $this->httpRequest->getUrl()->setQuery($confirm_parameters);
$query = $url->query;
$mail->setFrom('Blabla <mail@domain.com>')
->addTo($senddata->email)
->setSubject('Site : subscription')
->setHTMLBody(
'<h1>Join our site</h1>
<p>To activate your account, click there :</p>
<p><a href="http://localhost/nette/www/subscription/confirmation/'.
$query.'" target="_blank">Confirmation.</a></p>
I will come back to you after some tests to say if it succeeds. I hope it will work ! :)
- Reka
- Member | 19
It still not work.
public function renderOther($id, $conf) { // when I try to use actionConfirmation, the output buffer error comes back
$id = 152;
$rand = mt_rand();
$link = $this->link('Subscription:confirmation', ['id' => $id, 'conf' => $rand]);
dump($link);
$link2 = $this->httpRequest->getUrl()->getQueryParameter($conf);
$link3 = $this->httpRequest->getUrl()->getQueryParameters();
dump($link2);
dump($link3);
}
Observation :
with this code,
$link → “/nette/www/subscription/confirmation/152?conf=1811377368”
(56)
$link2 & $link3 → array ()
when I change the 4th line and put ‘ids’=>$id,
$link → “/nette/www/subscription/confirmation?ids=152&conf=378211100”
(59)
but… $link2 / $link3 → array ()
Jan Tvrdík has maybe given an obvious indicator of my mistake, but I am unsure to understand it.
Last edited by Reka (2015-11-29 15:59)
- Reka
- Member | 19
Ok, I didn't see the difference between getQueryParameters() and getQueryParameter()
(I corrected my code above as a consequence)
But it doesn't give an empty array, is it?
There are two args in the URL which are passed to the method too.
If I don't use getQueryParameter(s) to get the parameters in the URL, what am
I supposed to use as function?
Last edited by Reka (2015-11-29 16:06)
- Šaman
- Member | 2659
Reka wrote:
But it doesn't give an empty array, is it?
There are two args in the URL which are passed to the method too…
Are you sure? Are that two parameters in URL? That mean in
address bar of browser?
You create a link with parameters in (1).
Then you dont create any link, just variable named $link2
where are
your actual request conf
param. Same as in
$link2
, there is actual request parameters.
- Reka
- Member | 19
Ok, I understand… Saman was right !
My last tests simulated the URL inside the code and the page but I didn't
integrate the URL in the address bar…
The result is now OK :
array (2)
ids ⇒ “152” (3)
conf ⇒ “853349280” (9)
A last question : how do you explain the difference of behaviors between
id(1) and ids(2) as args ?
(1) → “/nette/www/subscription/confirmation/152?conf=1811377368” (56)
(2) →
“/nette/www/subscription/confirmation?ids=152&conf=378211100” (59)
Is it a security system… ?
Thank you again, everybody.
Last edited by Reka (2015-11-29 16:56)
- David Matějka
- Moderator | 6445
@Reka id
parameter is defined in the route mask: https://github.com/…rFactory.php#L19