Jak nastavit cookies a jak správně vytáhnout z DI IResponse?

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

Mám problém s vytvořením cookie. Snažím se po odeslání subscribe formu z vyskakovacího okna nastavit cookie na 1 rok.

Řekl bych, že to asi jen nastavuji na špatném místě (ale kde jinde než ve zpracování formu?).

Poradíte někdo, prosím? :)

<?php

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\Application\UI;


/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
	/** @var Nette\Http\IRequest @inject */
	public $request;
	/** @var Nette\Http\IResponse @inject */
	public $response;

	public function beforeRender() {
		parent::beforeRender();
		// vyhazuje null
		dump($this->request->getCookie('showSubscribe'));
	}

	protected function createComponentSubscribeForm() {
		$form = new UI\Form;
		// není důležité
		return $form;
	}

	public function subscribeFormSucceeded($form, $values) {
		// žádná chyba ve stylu "headers has been already sent"
		$this->response->setCookie('showSubscribe', false, 60 * 60 * 24 * 365);
	}
}

Editoval Northys (11. 8. 2014 7:25)

David Matějka
Moderator | 6445
+
0
-

A nebude spis problem tady ?:

$this->template->showSubscribe = ($this->request->getCookie('subscribe') == NULL) ? true : false;

jelikoz false == null (takze zkus pouzit ===)

Northys
Člen | 29
+
0
-

Na tom moc nezáleží. Všimni si, že hned potom to dumpuju, kdyby tam něco bylo, tak bych si toho všimnul :-)

Majkl578
Moderator | 1364
+
+1
-

Hodnota cookie musí být string. To samé platí při čtení cookie, vždy je to string nebo NULL.
A pokud formulář má navěšenou událost na odeslání (což jsi nejspíš vymazal a nazval „není důležité“, mělo by to fungovat.

Northys
Člen | 29
+
0
-

Samozřejmě, že je tam callback – chtěl jsem ten kód maximálně zjednodušit. Funguje, děkuji.

Pozn.: nezkonvertuje se to automaticky.

Editoval Northys (11. 8. 2014 12:02)