Nette 2.1 – jak na model, konfigurace a přístup k němu

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

Jsem zvyklý z N2.0 používat model takto:

	services:
		database: @Nette\Database\Connection

		myModel:
			class: MyModel
			arguments: [@database]
//Presenter
$this->context->myModel

Jak to samé udělám v N2.1? Zkouším:

services:
	- Model\MyManager
//Presenter
$this->context->myManager

Ale vrací se mi Service 'MyManager' not found
Díky

Editoval simPod (24. 12. 2013 3:39)

simPod
Člen | 383
+
0
-

Chápu dobře teda: $this->context->getService("MyManager")? To mi hází stále ten samý error.

one-two
Člen | 80
+
0
-

přes inject

v presenteru:

/**
 * @inject
 * @var Model\MyManager
 */
public $model;
simPod
Člen | 383
+
0
-

aha, pěkný. Díky

David Grudl
Nette Core | 8282
+
0
-

Ve 2.1 by mělo fungovat totéž, co jsi psal že používáš ve 2.0.

simPod
Člen | 383
+
0
-

je mozne, ze jsem neco delal spatne… Ale inject funguje, takze ok. Diky

Aurielle
Člen | 1281
+
0
-

David tím spíš myslel, žes vůbec nemusel měnit definici služby v configu.

JDC
Člen | 19
+
0
-

simPod napsal(a):

Jak to samé udělám v N2.1? Zkouším:

services:
	- Model\MyManager
//Presenter
$this->context->myManager

Ale vrací se mi Service 'MyManager' not found
Díky

Máš tu službu anonymní, proto ti to nejede. Anonymní služby lze jen přes injectem nebo přes getByType() v DI Pokud bys jí chtěl volat contextem, musíš ji pojmenovat

services:
 	myManager: Model\MyManager

Pak už by to mělo jít přes getContext. Jinak v 2.1 je context v presenteru deprecated, lepší je použít injectování metodou injectMyManager(\Model\myManager $manager) nebo anotací @inject.

simPod
Člen | 383
+
0
-

jasný, chápu. Díky moc

batko
Člen | 219
+
0
-

one-two napsal(a):

přes inject

v presenteru:

/**
 * @inject
 * @var Model\MyManager
 */
public $model;

Tohle mi bohužel nefunguje. a hlásí mi to Call to a member function getFromGroup() on a non-object

Mám komponentu Page, a vní tuto definici a nejde to, přes konstruktor není problém

Editoval batko (2. 1. 2014 20:42)

Robyer
Člen | 74
+
0
-

batko: Tohle funguje jen v nette 2.1 a jen v presenterech. Do komponent a služeb bys měl předávat závislosti např. tím konstruktorem.

Editoval Robyer (2. 1. 2014 21:15)

batko
Člen | 219
+
0
-

Aha, to že to jde jen v presenterech je dost zásadní info :-)

dík moc

Šaman
Člen | 2668
+
0
-

V @dev verzi to šlo všude, ale best practise je používat v modelu konstruktory.
Jinak mělo by to jít zapnout v configu u těch služeb, u kterých potřebuješ injectování pomocí nastavení - autowired: yes

David Matějka
Moderator | 6445
+
0
-

@Šaman: nikoliv autowired: yes, ale inject: yes

mrtnzlml
Člen | 140
+
0
-

Šaman napsal(a):

…best practise je používat v modelu konstruktory…

Toto už jsem několikrát četl, ale nikde jsem se pořádně nedočetl proč. Proč tedy?

simPod
Člen | 383
+
0
-

no jenom za mě co jsem pochytil tak je to minimálně asi to nejjednodušší řešení