Nastavení Session přes action a vypsání v jiném View

chemikus
Člen | 49
+
0
-

Ahoj,
trochu zápasím se session a nevím si rady. Asi je to spíš moje neznalost, ale věřím tomu, že na to přijdete hned :)

BasePresenter

<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter {

	/** @var Nette\Http\Session */
	public $session;

	/**
	 * Startup funkce a nastavení
	 */
	protected function startup() {
		parent::startup();
		$this->session = $this->getSession();
	}
?>

CompaniesPresenteru napřed přes actionSetFilter nastavím session – tedy filtr. Tenhle filtr poté chci použít v Default view. Ale bohužel, session mi hlásí, že je prázdná … zápis následující:

<?php
class CompaniesPresenter extends BasePresenter {

	/**
	 * Nastaví filtr pro společnosti
	 *
	 * @param string $key Klíč v poli pro filtrování
	 * @param string $value Hodnota pro daný klíč, která se má filtrovat
	 */
	public function actionSetFilter($key, $value) {
		$filter = $this->session->getSection("companies_filter");
		$filter->$key = $value;

		// ZDE SE MI PŘES DUMP ZOBRAZÍ TA HODNOTA, KTEROU JSEM NASTAVIL

		$this->redirect("Companies:");
	}

	/**
	 * Vykreslí úvodní stránku Společností
	 */
	public function renderDefault() {
		$this->template->breadcrumbs = $this->breadcrumbs;

		$filter = $this->session->getSection("companies_filter");

		// TADY SE MI PŘES DUMP NEZOBRAZÍ VŮBEC ŽÁDNÁ ZADANÁ HODNOTA :(
	}
}
?>

Nevíte někdo, co kde dělám špatně? Nějaké nápady, jak mám přes action nastavit session, kterou budu mít poté k dispozici v různých dalších view?

Pro jistotu ještě přikládám jednotlivé DUMP z action a poté z render

<?php

// SETFILTER
Nette\Http\SessionSection #7e94
	warnOnUndefined => false
	session private => Nette\Http\Session #df74
		regenerated private => false
		options private => array (10)
		request private => Nette\Http\Request #bc9d
		response private => Nette\Http\Response #3c73
			cookieDomain => ""
			cookiePath => "/"
			cookieSecure => false
			cookieHttpOnly => true
			warnOnBuffer => true
			code private => 200
		handler private => null
	name private => "companies_filter" (16)
	data private => array (1)
		public => "0"
	meta private => null

// RENDER DEFAULT
Nette\Http\SessionSection #62e9
	warnOnUndefined => false
	session private => Nette\Http\Session #737b
		regenerated private => false
		options private => array (10)
		request private => Nette\Http\Request #451d
		response private => Nette\Http\Response #3362
			cookieDomain => ""
			cookiePath => "/"
			cookieSecure => false
			cookieHttpOnly => true
			warnOnBuffer => true
			code private => 200
		handler private => null
	name private => "companies_filter" (16)
	data private => null
	meta private => false
?>

config.neon

<?php
session:
	expiration: 2 days
	autoStart: smart
?>
Milo
Nette Core | 1283
+
0
-

Hm, nevidím nic, proč by to nemělo fungovat. Kód z BasePresenteru ohledně session klidně vyhoď a zkus to takhle:

class CompaniesPresenter extends BasePresenter
{

    public function actionSetFilter($key, $value)
	{
		$session = $this->getSession(__CLASS__);
		$session->filter = [$key => $value];
        $this->redirect("default");
    }


    public function renderDefault()
	{
		$session = $this->getSession(__CLASS__);
		dump($session->filter);

        $this->template->breadcrumbs = $this->breadcrumbs;
    }
}
chemikus
Člen | 49
+
0
-

Teď jsem přišel na velmi zajímavý jev :) Takže vlastně můj přístup funguje, jen se nějak divně zobrazuje ten dump. Viz příklad dole:

<?php
public function renderDefault() {
	$filter = $this->session->getSection("companies_filter");
	dump($filter);
	if ($filter->set) {
		dump($filter);
	}
}
?>

DUMP Č. 1

<?php
Nette\Http\SessionSection #bb0c
	warnOnUndefined => false
	session private => Nette\Http\Session #09cf
	name private => "companies_filter" (16)
	data private => null
	meta private => false
?>

DUMP Č. 2 – tedy ten, který je v podmínce kde se ptám, zda je nastaven filtr

<?php
Nette\Http\SessionSection #bb0c
	warnOnUndefined => false
	session private => Nette\Http\Session #09cf
	name private => "companies_filter" (16)
	data private => array (8)
		set => true
		levels_id => null
		consultant => 1
		status => null
		specializations => null
		active => null
	filter_name => "companies_filter" (16)
	meta private => null
?>