Automatické zavolání metody při injectu služby do presenteru

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

Potřebuji při vložení nějakého modulu rozšířit nějakou základní třídu v aplikaci. Moje představa byla nějaká taková:

<?php
abstract class Repository extends \Nette\Object implements IRepository {

    public function __construct(\Nette\Database\Context $db) {
        $this->intialize();
    }

    public function intialize() {

    }
}


class BarRepository extends Repository implements IRepository {

    public function initialize() {

        MetaDataRepository::extensionMethod('getBar', function(MetaDataRepository $that, $metaDataId) {
            // nějaký kod
        });

    }

}

class FooPresenter extends BasePresenter
{
    /** @var \Model\Repositories\BarRepository @inject */
    public $bar;

    public function actionDefault($metaId, $metaUrl) {
        $topic = $this->metaDatas->getBar($metaId);
    }
}
?>

Což bohužel nefunguje, protože se zjevně nezavolá konstruktor BarRepository. Jak to vyřešit aby se metoda BarRepository::initialize() zavolal vždy při injectu?

matopeto
Člen | 395
+
0
-

stale mozes pouzit klasiku bez @inject anotacie.

<?php
protected $bar

function injectBar($bar) {
	$this->bar = $bar;
	$this->foo();
}
?>

Editoval matopeto (3. 4. 2014 16:46)