Dynamické injectiovanie extensions

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

Ahoj,

napísal som si nejaký extension na Blogger API a funguje to tak, že tam mám zdroják a aktivujem/deaktivujem to cez vyplňenie config.neon teda

extensions:
BloggerAPI: tralala/tralala

Vtip je v tom, že na niektorých projektoch to chcem mať aktivované a na niektorých nie.
Keď teda odmažem BloggerAPI z extensions tak mi to vyhodí hlášku o tom či som nezabudol zaregistrovať extension (lebo v kóde sa používa)

Ako to riešiť?

Momentálne to riešim v presenteri takto:

<?php
public function loadExtensions() {

	// Blogger
    try {
    	$this->blogger = $this->context->getService( 'blogger.blogger' );
    }
    catch ( \Nette\DI\MissingServiceException $e ){
    	$this->blogger = null;
    }
}
?>

Niekde som ale čítal že používanie $this->context nie je ok, a neviem vymieslieť nič rozumnejšie. Resp. existuje nejaký „čisty spôsob“ ako si vytahnuť zoznam načítaných extensions?

Vďaka

Zax
Člen | 370
+
+1
-

Službu vyžádanou v konstruktoru nebo inject metodě jde označit jako nepovinnou přidáním default hodnoty NULL.

function __construct(Blogger $blogger = NULL) {
	$this->blogger = $blogger;
}

(nevím, jestli je nějaká finta i pro inject anotace, ty jsem přestal používat před dlouhou dobou)

Editoval Zax (14. 9. 2015 11:35)

xrep
Člen | 51
+
0
-

inject* metóda s default parametrom funguje skvele, ďakujem!