tohle netuším jak nazvat, snad jenom, že hloupý qteck potřebuje poradit

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

AHoj,

řešil jsem jak dostat data z modelu do presenteru. Nejlepší volbou je injektování skrze anotace, přečetl jsem.

tak jsem se pokusil nešlo a nešlo a nešlo to a pak metodou pokus omyl jsem došel k tomuto scriptu:

class HomepagePresenter extends BasePresenter
{
        /** @var \Repository\Article @inject */
        public $article;

        function __construct(\Repository\Article $article)
        {
            parent::__construct();
            $this->article = $article;
        }
	public function renderDefault()
	{
            $this->template->article = $this->article->getArticle();
	}

}

kouzelné je, že vlastně funguje bez injektování aji bez rodičovského konstruktoru no a já se ptám, jak je to možné?

ořezanej kus:

class HomepagePresenter extends BasePresenter
{
        public $article;

        function __construct(\Repository\Article $article)
        {
            $this->article = $article;
        }
	public function renderDefault()
	{
            $this->template->article = $this->article->getArticle();
	}
}

nehleďmě teďka na banálnost onoho scriptu jako takového, ale co se týče nette zápisu, je to takto správně? Otázka se týká zejména: „\Repository\Article $article“.

a taky trochu z nette, ten rodičovskej kontruktor jsem tam šoupl nakonec jenom protože mi tam netbeans furt upozorňoval, že by tam měl být, je to opravdu tak a proč?

sorry za lame.

hAssassin
Člen | 293
+
0
-

@qteck > asi takhle, oba priklady jsou spatne. proc oba funguji, je celkem jasny, prvni funguje protoze tam mas @inject anotaci, cili potom je predani \Repository\Article v konstruktoru zbytecny. Druhy priklad postrada anotaci @inject ale funguje predani zavislosti pres konstruktor (priznam se ze nevim co je uprednostnovany – konstruktor vs. inject).

Kazdopadne proc je to spatne? Protoze Predavani zavislosti do presenteru pres konstruktor je spatne. Mely by se pouzivat anotace @inject. Cili kod se pak dost zjednodussi:

class HomepagePresenter extends BasePresenter
{
    /** @var \Repository\Article @inject */
    public $article;

    public function renderDefault()
    {
            $this->template->article = $this->article->getArticle();
    }

}