http Request – jak na nej? Creating default object from empty value

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

Zdravím všechny,

pokouším se zpracovat hodnoty httpRequest. Bohužel neuspěšně. Zkusil jsem 3 přístupy. viz.. níže. bodužel nemám dost zkušeností, s DI containerem, žádné, tak jsem to nedal.
Vždy jsem se dostal do stejné situace „Creating default object from empty value“. Chápu to tak, že volání nějak správně neinicializuji či nevolám.
Díky za pomoc předem..

1) Vytvoření a použití DI/Containeru pro volání funkce container->getByType(‚Nette\Http\Request‘)

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\DI\Container;

class SitePresenter extends BasePresenter
{
public function renderDefault()
{
$container = new Container;

$template->httpRequest = $container->getByType(‚Nette\Http\Request‘);

nejede

2) Metoda getHttpRequest dostupná v presenteru

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\DI\Container;

class SitePresenter extends BasePresenter
{
public function renderDefault()
{
$template->httpRequest=$this->getHttpRequest();


nejede

3) pokud o inicializaci containeru konstruktorem (rozpracování pokusu 1))

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\DI\Container;

class SitePresenter extends BasePresenter
{
/** @var Nette\DI\Container */
protected $container;

public function __construct(Nette\DI\Container $container)
{
parent::__construct($container);
$this->container = $container;
}
public function renderDefault()
 {

$template->httpRequest = $this->container->getByType(‚Nette\Http\Request‘);


nejede

Díky moc za odpověď předem a zdravím

ViPEr*CZ*
Člen | 809
+
0
-

A v metodě 2 vrací $this->getHttpRequest(); co? Případně nelze použít jen metodu getRequest(); ?

CZechBoY
Člen | 3608
+
0
-

Začal bych tím, že popíšeš problém, který řešíš. Pak když už bys měl vkládat nějaký zdrojáky tak je pls formátuj, ať se to dá číst.

Pokusim se odpovědět na to co si psal (asi odpovim na něco jinýho).

HttpRequest se zpracuje pomocí Routeru a vytvoří se AppRequest, zavolá se presenter a presenter vytvoří response (většinou šablona nebo json).
O kterou část se teď snažíš?

Nicméně v presenteru máš vždycky DIC (dependency injection container) k dispozici v $this->context.
A taky máš k dispozici HttpRequest v $this->getHttpRequest().

Doporučuju si přečíst jak funguje aplikace v Nette: https://doc.nette.org/…n/presenters#…

Ještě doplním k tvému bodu 2: proč by někdo chtěl mít celej httpRequest v šabloně? Asi řešíš něco co už je vyřešené.

@ViPEr*CZ* $this->getRequest() vrací aplikační request nikoli HttpRequest! viz. životní cyklus aplikace.

Editoval CZechBoY (5. 2. 2017 13:47)

Jan Mikeš
Člen | 771
+
+2
-

Ahoj, chybová hláška Creating default object from empty value se vůbec netýká http requestu – chyba je v tom, že používáš proměnnout $template, kterou nikde nevytváříš. Pro předání dat do šablony v presenterech používej $this->template->....

Editoval Jan Mikeš (5. 2. 2017 15:57)

ViPEr*CZ*
Člen | 809
+
0
-

@CZechBoY: no to jo… nechtěl jsem, aby to zaměňoval… spíše jsem nevěděl co hledá, takže pokus… co kdyby tam našel co hledá.
Nicméně koukám, že jsme si nevšimli stejně čeho si všiml @JanMikeš :-) což mě vede k tomu co jsi psal a to, že by měl dotyčný příště použít formátování pro zdrojáky ;-)

Martin67
Člen | 6
+
0
-

Hmm, děkuji všem, pokusím se vstřebat co jste napsali. Momentálně mi to objasnilo kolik toho nevím. Samozřejmě se snažím jít nejjednodušší cestou a ta není vždy průchozí.