Tip: Injectování závislostí to Presenterů skrze traits

- daniel.mejta
 - Člen | 21
 
Ahoj,
injektování závislostí do presenterů a komponent je tu celkem velké téma. Pro mě nejjednodušší metoda je asi skrze traity (php >= 5.4). Nadefinuji si traity pro inject:
trait injectUserRepository
{
    /** @var UserRepository */
    private $userRepository;
    /**
     * @param UserRepository $userRepository
     */
    public function injectUserRepository(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }
}
a následně v presenteru pouze řeknu, co se má injektovat:
class SignPresenter extends NotSecuredPresenter
{
    use injectUserRepository;
    ...
}
Je to snadný, přehledný a podle mě i čistý způsob, jak se vyhnout
inject hell v presenterech a mít kód prezenterů co nejjednodušší a
zároveň za tím není žádná velká magie (@inject anotace).
Jediná magie je automatické volání inject metod.
Filozofická otázka: Co si o tom myslíte, existuje lepší cesta? Je to dobrý způsob?

- Jan Mikeš
 - Člen | 771
 
Ahoj, neco hodne podobneho uz mame tady
navic pokud nemam chybne informace tak v dev verzi (od 2.1) se inject
metody zrusi a @autowire</del> @inject bude automaticky
soucasti nette FW
Osobne se mi zda reseni od Filipa Prochazky lepsi, mas property primo v presenteru (jsou na ocich), takhle aby je clovek hledal v traitach, jak se presne jmenuji.
Editoval Lexi (9. 8. 2013 19:46)

- vvoody
 - Člen | 910
 
V dev to nieje @autowire ale @inject.
https://api.nette.org/…ner.php.html#260
https://api.nette.org/…ers.php.html#153

- David Grudl
 - Nette Core | 8285
 
Metody inject se určitě rušit nebudou. Neměly by ale být používány nikde, kde lze použít konstruktor.