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 | 2668
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