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 | 8173
Metody inject se určitě rušit nebudou. Neměly by ale být používány nikde, kde lze použít konstruktor.