Funguje požadavek getQuery?

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

Chtěl bych se zeptat jestli funguje požadavek getQuery. Chtěl bych díky němu získávat konkrétní parametry z z URL ze kterého jsem přišel a vrací mi to trošku jiné výsledky než bych očekával.

Například pokud jsem na stránce co má parametry foo=foo&bar=bar a přejdu na stránku s tímto kódem:

<?php
use Nette\Http\Url;
$httpRequest = $this->getService('httpRequest')->getReferer();
$this->template->foo = $httpRequest->getQuery('foo');
$this->template->bar = $httpRequest->getQuery('bar');
?>

a nechám si to v šabloně zobrazit, tak výsledek nebude, že $foo = „foo“ a $bar = „bar“, ale , že $foo = „foo=foo&bar=bar“ a $bar to samé.

Nette Framework 2.0-beta (revision c4a9fbb released on 2011–12–23)

Filip Procházka
Moderator | 4668
+
0
-

Víš co zkus? Udělat to podle dokumentace.

Každá komponenta (takže i presenter) má chráněnou proměnnou $params, do které si tyhle věcičky ukládá. Sama si je totiž přečte z httpRequest!

Takže jediné co ty musíš udělat, je

$foo = $this->getParameter('foo');

kdekoliv v presenteru, nebo komponentě. Občas se taky hodí mít to jako persistentní parametr

/** @persistent */
public $foo;

Takto se ti dokonce „sama“ doplní do proměnné té komponenty/presenteru.

Nebo v tvém případě, bych ještě lépe použil parametry „životní události presenteru“.

public function renderDefault($foo = NULL, $bar = NULL) // pokud jsou povinné, neuváděj NULL
{
	$this->template->foo = $foo;
	$this->template->bar = $bar;
}
Pilda
Člen | 52
+
0
-

Hosiplan:
díky, právě, že jsem to dělal podle dokumentace. Doslova se tam píše toto:

<?php
$id = $httpRequest->getQuery('id'); // vrací GET parametr 'id' (nebo NULL)
?>

Což si já jakožto nováček vyložím tak, že to opravdu vrací ten parametr a ne jenom jako.

Možná jste mě špatně pochopil, já nechci získat parametry ze stránek, kde zrovna jsem, ale ze stránek ze kterých jsem přišel.

Takže tento kód musí vracet parametr foo ze stránek ze kterých jsem přišel, ale nevrací.

<?php
$httpRequest = $this->getService('httpRequest')->getReferer()->getQuery('foo');
?>

Editoval Pilda (4. 1. 2012 16:46)

Jan Tvrdík
Nette guru | 2595
+
0
-

$this->getService('httpRequest')->getReferer() je instance Nette\Http\Url, která sice náhodou má také metodu getQuery, ale nepřijímá žádný parametr.

Pilda
Člen | 52
+
0
-

Ale v té dokumentaci to je psané stylem, že to je v Nette\Http\Url, nebo se pletu? Možná námět na opravu té dokumentace…

Nicméně jsem si našel, že ta funkce existuje s těma parametrama i v Nette\Http\Request, ale když jsem to nahradil, tak mi to stejně nešlo. Má někdo jistotu, že ta fuknce je skutečně funkční?

Editoval Pilda (4. 1. 2012 16:44)

Jan Tvrdík
Nette guru | 2595
+
0
-

Přečti si to ještě jednou, díky: https://doc.nette.org/cs/http/request

Pilda
Člen | 52
+
0
-

Promiňte, ale četl jsem si to už asi stokrát a nejsem schopný přijít na správné řešení, proto píše sem – do sekce pro začátečníky. Učím se v nette teprve asi 14 dní a zatím v něm asi nejsem tak zběhlý, abych byl schopen ten můj problém vyřešit. Včera jsem to řešil asi 2 hodiny a už bych se rád věnoval jiným věcem.

Možná, že jsem jenom nechápavý a hloupý, ale bohužel sekce pro idioty, kde bych se mohl zeptat tu není.

Editoval Pilda (4. 1. 2012 16:56)

Filip Procházka
Moderator | 4668
+
0
-

@**Pilda**: V dokumentaci je chyba, Url::getQuery() nemá žádný argument. A kdyby jsi se podíval na jeho zdroj, tak by jsi to věděl taky.

Nette\Http\Request::getQuery() má argument

Nette\Http\Request::getReferer() ale vrací Nette\Http\Url, který nemá argument v Nette\Http\Url::getQuery()

$refererQuery = $this->getHttpRequest()->getReferer()->getQuery();
$id = $refererQuery['id'];

Editoval HosipLan (4. 1. 2012 17:24)

Pilda
Člen | 52
+
0
-

HosipLan:
OK. Díky za rozřešení.