Funguje požadavek getQuery?
- Pilda
- Člen | 52
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
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
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
$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
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)
- Pilda
- Člen | 52
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
@**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)