Společné createTemplate() pro vlastní presenter a control

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Pokud chci rozšířit metodu createTemplate() vlastního BaseControl a zároveň BasePresenter, musím to udělat na dvou místech. Nelze tento proces přesunout pouze do BaseControlu? Potřebuji dědit zároveň BaseControl (svůj) a zároveň Presenter (Nette).

Jan Endel
Člen | 1016
+
0
-

Pokud můžeš použít php 5.4 tak traits, pokud ne asi ti nezbyde nic jiného, že v BasePresenteru v metodě createTemplate zavolat CreateTemplate z baseControlu.

Jan Tvrdík
Nette guru | 2595
+
0
-

To spíš naopak.

Tomáš Votruba
Moderator | 1114
+
0
-

Děkuji za reakce. Takto v BaseControlu

protected function createTemplate($class = NULL)
{
	$presenter = new Presenter;
	$template = $presenter->createTemplate($class);
}

mi laděnka vrací chybu v BasePresenteru „Trying to get property of non-object“ (pro presenter proběhne vytvoření v pořádku)

public function createTemplate($class = NULL)
{
	$template = parent::createTemplate($class);
	// ...
}

Budu tedy muset upravit i původní createTemplate?

uestla
Backer | 799
+
0
-

To je přece úplně špatně… V createTemplate() presenteru a komponenty se do šablony předávají důležité proměnné.

Volat metodu presenteru v komponentě by znamenalo, že $control, resp. $_control bude presenter, nikoli komponenta, apod. …

Tomáš Votruba
Moderator | 1114
+
0
-

Tzn. nemožné?

Jan Endel
Člen | 1016
+
0
-

@Jan Tvrdík: Pravda naopak to bude lepší
@Schmutzka Je to trošku hodně fujík, ale což takhle si projít co to vyplivne bez presenteru a s presenterem a ty proměnné co nejsou stejné přepsat zpět ($_control = $this…)

Editoval pilec (28. 6. 2012 11:44)

uestla
Backer | 799
+
0
-

@pilec To je snad ještě větší fujík…

To už budu raději mít upravený createTemplate() na dvou místech… Upravuji to přibližně jednou za dva uherské roky.

mkoubik
Člen | 728
+
0
-

Nebo si udělej nějakou metodu (nejspíš v nějaké službě), která vezme template, přidá do něj tvoje věci a opět ho vrátí. Tu pak volej jak v BaseControl::createTemplate(), tak v BasePresenter::createTemplate(). Pokud budeš něco upravovat, máš to na jednom místě.

uestla
Backer | 799
+
0
-

https://github.com/…igurator.php

Spíše než pouhé createTemplate() mě ale více trápí společná logika, kterou mám jak v BasePresenter, tak BaseControl – např. upravené chování flashMessage() apod…

Editoval uestla (28. 6. 2012 19:27)