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 | 2668
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)