nefunguje @inject v repository
- dawe
- Člen | 59
Ahoj, nejsem si jisty co delam spatne.
V repository chci nacist jine repository, nechci to delat pomoci konstruktoru
(to sice funguje, ale vzhledem k dedicnosti se to nehodi)
/** @var NewsRepository @inject */
public $newsRepository;
kdyz pak v kodu volam
public function updateNews($newsId){
$this->newsRepository->updateData($newsId);
}
tak to hazi
Call to a member function updateData() on a non-object
- Tomáš Votruba
- Moderator | 1114
Ahoj, inject je defaultně zapnutý pouze na presenterech. Jinde je preferován konstrukor injection.
Ad předávání konstruktorem, co konkrétně se nehodí?
K tomuto tématu se ti možná bude hodit Jak
dostat do BaseControl službu, aniž by se jí museli potomci zabývat?
- Šaman
- Člen | 2666
Jop, to je ServiceLocator. Není to úlně doporučovaný vzor, ale taky jsem
ho míval jako jádro modelu a nebyly s tím v menších aplikacích žadné
problémy.
Tam ale klidně použij konstruktor. Ano, bude mít mnoho řádků, ale ten
Model, nebo jak to chceš nazvat, opravdu potřebuje ke své činnosti všechny
ostatni repozitáře.
- Tomáš Votruba
- Moderator | 1114
Konstruktor v rodiči můžeš nahradit např. setterem pomocí DecoratorExtension
- David Kudera
- Člen | 455
ani moc ne.. jestli má nějakou base třídu a chce injecty i v ní, tak by tohle musel zapnout u každé služby, což je určitě dost otrava
- David Kudera
- Člen | 455
no tak jasně, pokud jich budu mít 5, tak asi jo.. u 10. třeba po 3 měsících to ale už začnu zapomínat psát a to už by mohl být problém