Jak správně připojit Model do Presenteru v Nette 2.1

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

–NoobAlert– :)

Zdravím,

doposud jsem Model v Presenteru připojoval v každé metodě zvlášť do lokální proměnné pomocí:

$this->getService('nazevServiceZConfigNEON')

V Nette 2.1 je ovšem toto DEPRECATED a je nutné přejít na použití:

$this->getContext()->getService('nazevServiceZConfigNEON')

V komentářích changelogu jsem se ale dočetl, že ani toto není úplně košér způsob.

Ještě mě napadá využití metody injectNejakouSluzbu(), ale nevím, zda je to ten nejlepší způsob. Různě jsem hledal, ale nikde jsem se nedočetl, co je jednoznačně validní způsob (který alespoň nebude v následujících verzích deprecated).

Víte někdo, jaký způsob je nejlepší? :)

Editoval kastanekdavid (6. 1. 2014 16:12)

David Matějka
Moderator | 6445
+
0
-

inject* metody nebo @inject anotace


/**
* @inject
* @var \Foo\Bar
*/
public $foo;

nebo

protected $foo;

public function injectFoo(\Foo\Bar $foo)
{
	$this->foo = $foo;
}

Editoval matej21 (6. 1. 2014 22:41)

kastanekdavid
Člen | 39
+
0
-

matej21 napsal(a):

inject* metody nebo @inject anotace


/**
* @inject
* @var \Foo\Bar
*/
public $foo;

//nebo

protected $foo;

public function injectFoo(\Foo\Bar $foo)
{
	$this->foo = $foo;
}

Díky! :)

Ten druhý způsob funguje pěkně.

Ten první stajl asi bez namespaces nerozchodím, že? Jako takto:

	/**
	* @inject
	* @var calendarModel
	*/
    private $model;
	public function renderNew(){
		$model = $this->model;
		$model->test();
	}

V config.neon mám:

	services:
		calendarModel: CalendarModel
David Matějka
Moderator | 6445
+
0
-

asi to bude case sensitive – CalendarModel (neni dulezity nazev sluzby, ale typ sluzby)

Majkl578
Moderator | 1364
+
0
-

kastanekdavid napsal(a):

Ten první stajl asi bez namespaces nerozchodím, že?

Pokud uvedeš presenter v configu (a tudíž jej budeš mít jako službu), pak to fungovat bude.

Tomáš Votruba
Moderator | 1114
+
0
-

@kastanekdavid: $model musí být public, ne private