DI container v konstruktore presenteru

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

Zapisom konstruktoru presenteru ako ho predviedol David na PoSobote https://www.youtube.com/watch?… 27:42 som odstrihol pristup ku contextu pre Nette\Application\UI\Presenter, ten som tam teda doplnil ale stale sa mi tam nepaci ten context, ide to cistejsie, alebo je to takto spravne?

class MyPresenter extends BasePresenter {

	private $database;

	public function __construct(Nette\DI\IContainer $context, Nette\Database\Connection $connection) {
		parent::__construct($context);
		$this->database= $conection;
	}
}

Mam povazovat ten context za klavir s cigarou? Ak ano, tak je spravne davat do „rúk“ Nette\Application\UI\Presenter-u cely DI container?

Editoval vvoody (27. 4. 2012 13:07)

Elijen
Člen | 171
+
0
-

Od tohoto commitu by nemelo byt nutne predavat context contructoru. Misto toho ho PresenterFactory doplni pomoci metody setContext automaticky.

pepakriz
Člen | 246
+
0
-

Kdo chce volný konstruktor i ve verzi 2.0.x, dá se použít takový nepěkný (ale funkční) hack v BasePresenteru.

	public function __construct()
	{
		$container = new \Nette\DI\Container;
		$container->parameters["productionMode"] = true;
		parent::__construct($container);
	}



	final public function setContext(\Nette\DI\Container $context)
	{
		parent::__construct($context);
	}
Elijen
Člen | 171
+
0
-

Fuj, to už bych si raději patchnul \Nette\Application\UI\Presenter podle commitu z GitHubu.

David Grudl
Nette Core | 8228
+
0
-

Řešení použité v DEV verzi byla spíš náplast na ústa, s největší pravděpodobností se vrátí původní způsob z 2.0.x

vvoody napsal(a):

Mam povazovat ten context za klavir s cigarou?

Ano, je to tak. Ideální řešení to není, ale krom ideálů musí framework ctít i zpětnou kompatibilitu.

Elijen
Člen | 171
+
0
-

Já myslel, že Presenter už nebude context potřebovat. Nenapsal na to někdo už patch? Matně si vzpomínám, že jsem ho někde viděl.