TabControll nahrazení Environment::getSession

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

Zdravím,

potřeboval bych poradit. Snažím se rozchodit Tabcontroll a nevím přesně jak optimalizovat některé fnce pro Nette 2.0

<?php
	function saveTabsOrder(array $order) {
		$session = Environment::getSession("TabControl\\".$this->getUniqueId());
		$session["order"] = $order;
	}
	function loadTabsOrder() {
		$session = Environment::getSession("TabControl\\".$this->getUniqueId());
		return (array)$session["order"];
	}
?>
Jan Endel
Člen | 1016
+
0
-

Session získáš z kontextu:

$session = $this->context->session;//vola se ve skutecnosti $this->context->getSession();
m4rty
Člen | 40
+
0
-

Díky za odpověď, akorát z nějakého důvodu nemohu přistoupit ke context

Cannot read an undeclared property TabControl::$context.
Jan Endel
Člen | 1016
+
0
-

Aha, ty to používáš v komponentě, v tom případě předávat sessionSection v konstruktoru:

use \Nette\Http\Session;

public class MyTabControl extends TabControl
{
	/**@var \Nette\Http\Session */
	private $session;



	public function __construct($parent, $name, Session $session)
	{
		parent::__construct($parent, $name);
		$this->session = $session;
	}



	function saveTabsOrder(array $order) {
                $session = $this->session->getSection("TabControl\\".$this->getUniqueId());
                $session["order"] = $order;
        }



        function loadTabsOrder() {
                $session = $this->session->getSection("TabControl\\".$this->getUniqueId());
                return (array)$session["order"];
        }
}

Asi nějak takhle bych to napsal.

m4rty
Člen | 40
+
0
-

Díky, moc si mi pomohl!

bojovyletoun
Člen | 667
+
0
-

a nebo $this->presenter->context->session

MartyIX
Člen | 217
+
0
-

Vzdycky vaham, jestli pouzit DI (viz pilec) nebo reseni od bojovyletoun. Nakonec tedy vetsinou spis volim to druhe, protoze je to snazsi.

Jan Endel
Člen | 1016
+
0
-

Právě jeden ze základních kamenů DI je použití toho, jen co skutečně potřebuješ a ne získávání celého kontextu, je to více psaní, ale je to čistější, odvěké dilema programátora :-).

MartyIX
Člen | 217
+
0
-

pilec: S tim souhlasim, nicmene ten kontext se mi libi, protoze pri testovani by slo ho pekne naplnit, cim je potreba, takze treba u tohoto prikladu nevidim moc prinos DI.

Filip Procházka
Moderator | 4668
+
0
-

Šahat z komponenty na context presenteru je docela hrubým porušením zapouzdření.

MartyIX
Člen | 217
+
0
-

@HosipLan: Tak to by ten kontext musel byt private/protected, abych se k nemu nedostal. Pokud se k nemu dostat muzu, tak nic neporusuju.

Filip Procházka
Moderator | 4668
+
0
-

@**MartyIX**: Částečně máš pravdu, ale stejně s tebou nesouhlasím https://en.wikipedia.org/…w_of_Demeter

Ot@s
Backer | 476
+
0
-

HosipLan napsal(a):

Šahat z komponenty na context presenteru je docela hrubým porušením zapouzdření.

Mám tomu rozumnět (mimo jiné) tak, že komponentám „dávám“ jen to, co potřebují k životu? Jinými slovy, „externí zdroje“ komponent by měly přijít výhradně (např.) skrze DI?

Filip Procházka
Moderator | 4668
+
0
-

@**Ot@s**: Jistě.

hAssassin
Člen | 293
+
0
-

[OT]neni to, co psal Ot@s, primo definice DI? :-)[/OT]

Filip Procházka
Moderator | 4668
+
0
-

@**hAssassin**: Víceméně ano :)

whipster
Člen | 17
+
0
-

Ahoj M4rty taky se pokouším rozběhat tabControl na Nette2.0
Tobě se to povedlo?

já jsem se v tuto chvíli zasekl na úpravě toho SnippetHelperu ( v nette2.0 vůbec není )