Jak použít httpRequest (zjištění IP adresy)
- Proloo
- Člen | 24
Zdravím, tak jsem se z předchozího problému dostal o kus dál a
řeším teď další věc.
Chci při ukládání do databáze uložit také IP adresu uživatele.
V dokumentaci jsem si našel že se to dělá pomocí
$httpRequest->getRemoteAddress();
Ovšem samozřejmě už mi nějak nedochází tohle:
Aktuální HTTP požadavek, objekt Nette\Http\Request, získáme jako službu
httpRequest ze systémového DI kontejneru:
// $container je systémový kontejner, např. $presenter->context
$httpRequest = $container->getService('httpRequest');
Jak to mám konkrétně použít? Tyhle konfigurace mi zatím dělají v Nette velký problémy, protože se v tom neumím pořádně orientovat.
- Vojtěch Dobeš
- Gold Partner | 1316
Zmíněný $container
je v presenteru dostupný jako
$this->context
. Takže v presenteru zkrácenou variantou:
$this->context->httpRequest->getRemoteAddress();
- Hubi
- Člen | 9
vojtech.dobes napsal(a):
Zmíněný
$container
je v presenteru dostupný jako$this->context
. Takže v presenteru zkrácenou variantou:$this->context->httpRequest->getRemoteAddress();
když zadám v presenteru
$this->context->httpRequest->getRemoteAddress(),
tak mi to nahlásí, že používám nedefinovanou proměnnou context. Zkoušel jsem také pro získání ip použít příkaz:
Nette\Environment::getHttpRequest()->getRemoteAddress()
a ten mi vždy i na ostrém serveru vrátí hodnotu 127.0.0.1. Nevíte prosím někdo co s tím? V nette jsem začátečník, takže se v tom ještě moc nevyznám, jak to funguje.
- Vojtěch Dobeš
- Gold Partner | 1316
Ideální způsob na aktuální 2.0.5 je využít inject metody, takže takto:
private $httpRequest;
public function injectHttpRequest(Nette\Http\IRequest $httpRequest)
{
$this->httpRequest = $httpRequest;
}
public function actionSomething()
{
$this->httpRequest->getRemoteAddress();
}
@fr To je trochu odstrašující případ :) –
v presenteru není třeba používat $this->presenter
a
samozřejmě při poctivém předávání si závislostí je dobré vyhnout se i
$this->context
.
- Vojtěch Dobeš
- Gold Partner | 1316
@fr Rozumím, nicméně v presenteru je
$this
a $this->presenter
zcela totožnou instancí,
úplně tím samým. Jakékoliv potíže (tedy že tohleto neplatilo) musely
být vyvolané něčím jiným (zajímalo by mě, čím :) ).
- fr
- Člen | 8
vojtech.dobes napsal(a):
@fr Rozumím, nicméně v presenteru je
$this
a$this->presenter
zcela totožnou instancí, úplně tím samým. Jakékoliv potíže (tedy že tohleto neplatilo) musely být vyvolané něčím jiným (zajímalo by mě, čím :) ).
Domníval jsem se, že to jsou zcela totožné instance, takže dík za definitivní potvrzení.