jak na httpRequest v komponentě

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

Ahoj, poraďte prosím proč mi toto nefunguje v komponentě

    public $httpRequest;

    function __construct(Nette\Http\Request $httpRequest){
        $this->httpRequest = $httpRequest;
    }

Potřebuji zpracovat POST data v komponentě a nevím jak je dostat.
Myslel jsem, že si v konstruktoru předám httpRequest, ale to nefunguje.
Moc díky za radu
Lukáš

Oli
Člen | 1215
+
0
-

Jestli používáš nette 2.1, tak tady David popisuje jak se dostat k ošetřeným post datům.

konva
Člen | 88
+
0
-

používám 2.2.dev, tak snad je to stejné

konva
Člen | 88
+
0
-

bohužel jsem v tom videu uplně nenašel odpověď.
Mám komponentu která dědí z Control a v ní $this->getHttpData(); nefunguje.
Navíc pořád mám pocit že bych si měl předávat něco jak jsem psal v konstruktoru.
Díky za trpělivost
Lukáš

Majkl578
Moderator | 1364
+
0
-

Zmíněné video se týká formulářů, nikoliv komponent.

Oli
Člen | 1215
+
0
-

No píšeš, že chceš zpracovat POST data a tohle je funkce přímo na to. Nikdy jsem s tím nepracoval, takže nevím jak to přesně funguje. Teoreticky by ale nebyl problém si předat Nette\Application\UI\Form a tam už ta metoda getHttpData bude.

Jinak nevím proč, ale taky mě httpRequest nešlo injectnout v configu, takže když ho potřebuju v komponentě tak si ho předám přes setter. V presenteru je totiž přístupnej přes $this->getHttpRequest();

konva
Člen | 88
+
0
-

No Nette\Application\UI\Form si předat nemůžu když jej neodesílám ne? Např. pokud potřebuju zpracovat data z paypalu, který posílá při potvrzení platby.
Předání $this->getHttpRequest(); z presenteru mě taky napadlo, ale pořád si říkám, že je třeba elegantnější řešení :)
Poradí někdo?
Lukáš

konva
Člen | 88
+
0
-

Tak objevil jsem, že mi funguje v komponentě toto

$httpRequest = Environment::getHttpRequest();

Ale nevím jestli postupuji správně.
Může se prosím někdo zkušenější k tomu vyjádřit.
Ještě doplňuji, že používám nette 2.2.dev
Díky

honos
Člen | 109
+
0
-
$this->getPresenter()->getHttpRequest();

Nefunguje?

Quinix
Člen | 108
+
+1
-

Co znamená „nefunguje“? Nette\Http\Request je normální služba která se dá pomocí DI předat v konstruktoru…

@honos: getHttpRequest je v presenteru protected

Editoval Quinix (27. 1. 2014 0:09)

konva
Člen | 88
+
0
-

toto

$this->getPresenter()->getHttpRequest();

mi v komponente nefunguje. Píše to

Call to undefined method parent::getHttpRequest()

A pro Quinix. Nefunguje znamená toto

Argument 1 passed to Components\Uploadify::__construct() must be an instance of Nette\Http\Request, none given, called in D:\www\app\FrontModule\presenters\HomepagePresenter.php on line 48 and defined

Editoval konva (27. 1. 2014 0:14)

Pavel Macháň
Člen | 282
+
+1
-

konva napsal(a):

Tak objevil jsem, že mi funguje v komponentě toto

$httpRequest = Environment::getHttpRequest();

Ale nevím jestli postupuji správně.
Může se prosím někdo zkušenější k tomu vyjádřit.
Ještě doplňuji, že používám nette 2.2.dev
Díky

Statické volání pro sehnání služby určitě nepoužívej.

Každopádně

function __construct(Nette\Http\Request $httpRequest){ ... }

by fungovat mělo. Jak tu komponentu vytváříš?

Editoval EIFEL (27. 1. 2014 0:26)

honos
Člen | 109
+
0
-

Quinix napsal(a):

Co znamená „nefunguje“? Nette\Http\Request je normální služba která se dá pomocí DI předat v konstruktoru…

@honos: getHttpRequest je v presenteru protected

nefunguje – slovo jako slovo..
 – jj, už si vybavuji, musel jsem používat setter.. :o)

bazo
Člen | 620
+
+1
-

konva napsal(a):

toto

$this->getPresenter()->getHttpRequest();

mi v komponente nefunguje. Píše to

Call to undefined method parent::getHttpRequest()

A pro Quinix. Nefunguje znamená toto

Argument 1 passed to Components\Uploadify::__construct() must be an instance of Nette\Http\Request, none given, called in D:\www\app\FrontModule\presenters\HomepagePresenter.php on line 48 and defined

no ak vytvaras komponentu takto

<?php
protected function createComponentName()
{
    $c = new Component();
	...
}
?>

tak ten HttpResquest sa tam automaticky neobjavi, musis ho tam predat, alebo pouzivat generovane tovarnicky

<?php
protected function createComponentName()
{
    $c = new Component($this->getHttpRequest());
	...
}
?>
konva
Člen | 88
+
0
-

Uz EIFEl me navedl kde delam chybu. Vytvarel jsem komponentu takhle

$component = new \Components\ComponentName();

Opravil jsem to, ze jsem zalozil v konfiguraci sluzbu a v presenteru ji injectuju

$uploadcomponentify = $this->componentFactory->create();

a uz to samozrejme funguje.
Diky moc za trpelive rady.
Lukas