Nette 2.1 DI v extends class

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

Zdravim.

Dělám aplikaci ve které potřebuji ukládat poslední čas aktivity přihlášeného uživatele (kvůli statistice).

Jak bych na to šel?
Udělal bych si proto SecuredPresenter, který dědí od BasePresenter.

SecuredPresenter kontroluji zda je uživatel přihlášen (pokud není přesměruji na přihlášení), pokud je přihlášen nastavím s každým načtením do DB uživateli čas poslední aktivity.

Ale jak dostat do SecuredPresenter přístup do DB (konkrétně tabulky user)?

Když budu v SecuredPresenter mít svůj constructor, přes který budu DI $userRepository, budu muset ve všech presenterech ve kterých budu mít odděděno od SecuredPresenter přetížený construcotor pro DI volat rodiče:
parent::__construct( $userRepository );

Trochu se v tom ztrácím…

Jak to vyřešit?
Aby se mi do SecuredPresenter dostal $userRepository a nemusel jsem se o to v Presenteru, který dědí od SecuredPresenter vůbec starat.

enumag
Člen | 2118
+
0
-

Hledáš inject* metody a/nebo @inject anotace. Např.

/**
 * @var UserRepository
 * @inject
 */
public $userRepository;
Filip Procházka
Moderator | 4668
+
0
-

Abys pochopil proč se v presenterech a pouze v nich nepreferuje používání constructor injection, přečti si tenhle příspěvek :)