Egoblog.cz - Petr Kobelka

Nette a Cookies

Jak pracovat s Cookie v Nette si ukážeme v tomto postu. Je to rychlé a jednoduché.


PHP | Komentáře (0) | Shlédnuto 2461 × | Vloženo: 30. března 2015

Dnes vám ukážu, jak rychle a jednoduše pracovat s cookies v Nette. Zároveň ukážu praktický příklad, ze kterého vše rychle pochopíte. V tomto postu nejde o průkopnickou činnost, ale o shrnutí jednoduchých faktů, abych příště nemusel na internetu hledat, jak se to vlastně dělá.

Nette - Cookie - 2 objekty

Jak už nadpis sám napovídá, k práci budete potřebovat 2 různé objekty. Z jednoho budete informace o cookies číst a druhým budeme tyto informace do cookie zapisovat. Proč je to napsáno takto jsem nezkoumal a ani momentálně zkoumat nepotřebuji. Stačí vědět, že se dají cookies v Nette použít tímto způsobem a že fungují - ověřeno v praxi!

Čtení cookies v Nette

Pro čtení informací o cookies potřebujete objekt \Nette\Http\Request. Instanci můžete získat z DI kontejneru, např. voláním $this->context->httpRequest v presenteru. Na tomto objektu můžete volat metodu getCookie($name) jejíž první argument je název cookie v prohlížeči.

Např takto:

$request = $this->container->httpRequest;

if ($request->getCookie('moje-super-trooper-cookie'))
{
  //zde jsme overili platnost cookie
  //muzeme vykonat potrebny kod
}

Nebo můžete cookie použít jako zámek a ptát se negací if (!$request->....

Zápis cookies v Nette

Pro zápis informací do cooke potřebujete instanci třídy \Nette\Http\Response. Tu získáte z DI kontejneru, např. v presenteru voláním $this->context->httpResponse. Na tomto objektu můžete volat metodu ->setCookie($name, $value, $time). Metoda má více parametrů, pro nás jsou v tuto chvíli ale důležité první tři.

$name - název cookie
$value - zapisovaná hodnota
$time - čas platnosti cookie - zde s výhodou využijete třídu \Datetime.

Praktický příklad pro Nette a Cookie

Máme takovou situaci. Na webu máme lákavý banner, který zobrazujeme všem návštěvníkům. Nechceme ale, aby se zobrazoval pořád a chceme s tím mít co nejméně práce. Zapíšeme tedy např, takový kód:

$request = $this->container->httpRequest;
$response = $this->container->httpResponse;

if (!$request->getCookie('moje-cookie'))
{
  //zde naplnime obsah promenne sablony kodem s bannerem, nebo nastavime priznak zobrazeni banneru na ANO

  $response->setCookie('moje-cookie', 1, new DateTime('+ 5 minute')); // dalsi banner zobrazime nejdrice za 5 minut
}

Tento kód ověřuje existenci cookie. Pokud cookie vypršela (příkaz if s negací) tak provedeme potřebné instrukce, např. do šablony přepneme příznak pro zobrazení banneru. Dále objektem $response nastvavíme platnost cookie na TEĎ+5minut. Tedy banner se znovu zobrazí nejdříve za 5 minut.

Jednoduché a pochopitelné, že?

Více informací o HTTP Request a Response, nebo se podívejte do referenčního manuálu Nette.

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

Oups, žádné komentáře? Buďtě první !!!

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.