Neon – class: Article(…, %id%)
- Čamo
- Člen | 798
Ahoj kamaráti,
Mohol by mi prosím vás niekto vysvetliť doleuvedený kód? Konkrétne to aku
úlohu tam zohrávajú tie tri bodky a ako sa do výsledného kódu dostane to
$this->database? To už na úrovni konfigu funguje injektovanie,
či ako?
factories:
article:
parameters: [id, title: null]
class: Article(..., %id%)
setup:
- $title(%title%)
Vygeneruje:
function createArticle($id, $title = NULL)
{
$service = new Article($this->database, $id);
$service->title = $title;
return $service;
}
Ďakujem.
Editoval Čamo (21. 7. 2014 14:44)
- Šaman
- Člen | 2666
Tři tečky znamenají, že se nejprve provede autowiring pomocí typehintu a pak se ještě předá $id. Kdybys dal $id jako první parametr v konstruktoru třídy Article, tak ty tři tecky uvádět nemusíš – předá se do konstruktoru $id a zbytek zpracuje autowiring.
Ano, databáze se tam dostala autowiringem.
Jakou máš verzi Nette? Sekce factories
už je od
2.1 deprecated, dnes se na všechno používá sekce services
.
Pozn2: V reakci na tvé: „To už na úrovni konfigu funguje injektovanie,
či ako?“
Autowiring, tedy automatické injectování, funguje JEN při vytváření
třídy DI kontejnerem, tedy vpodstatě jen na úrovni konfigu. Pokud nějakou
třídu vytvoříš operátorem new
, tak se žádný autowiring
neprovede. Jen u presenterů je to skryté – i presentery se vytváří
v kontejneru, ale do configu se psát nemusí. U ostatních služeb platí,
že ‚injectování‘ funguje jen pokud jsi je uvedl v configu.
Editoval Šaman (21. 7. 2014 14:56)