nefunguje @inject v repository

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

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

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?

dawe
Člen | 59
+
0
-

Ahoj, diky za info a da se to nejak zapnout?

Jde mi o to, ze tu tridu dedim od jine, a ta je pak jeste dedena dal, takze bych musel predavat ty reference pomoci konstruktoru. Na ten odkaz se podivam

Šaman
Člen | 2666
+
0
-

V aktuální verzi se to čistě zapnout nedá, ale existuje rozšíření, které to zapne. V budoucích verzích bude možné definovat v configu, do kterých base tříd se má injectovat.

dawe
Člen | 59
+
0
-

Diky za info, jinak proc to hlavne resim.

Jde o to, ze v tom repozitari potrebuju nacitat vsechny ostatni repozitare abych je mohl aktualizovat. Nenapada mne vhodnejsi reseni jak toho docilit nez si ziskat vsechny reference a tem zavolat pozadovanou metodu.

Filip Procházka
Moderator | 4668
+
+3
-

Použij konstruktor.

Šaman
Člen | 2666
+
0
-

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.

dawe
Člen | 59
+
0
-

ok tedy, jediny co se mi na tom nelibi, ze musim pripojit i data, ktera jsou v rodicovskem konstruktoru.

Tomáš Votruba
Moderator | 1114
+
0
-

Konstruktor v rodiči můžeš nahradit např. setterem pomocí DecoratorExtension

iNviNho
Člen | 352
+
-1
-

Toto vyrieši tvoj problém na 120%

<?php

Routerik:
	    class: App\RouterFactory
	    inject: yes
?>
David Kudera
Člen | 455
+
0
-

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

iNviNho
Člen | 352
+
0
-

Problém to vyrieši.

Nemusí robiť veľkú aplikáciu a toto mu vyrieši problém behom 10 sekúnd.

David Kudera
Člen | 455
+
0
-

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

iNviNho
Člen | 352
+
0
-

súhlasím