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

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

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
+
0
-

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)

David Grudl
Nette Core | 8173
+
0
-

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