Best Practise – manuální render

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

Zajímalo by mě:

  • mám nějaký BaseForm
  • k tomu pak příslušné fomuláře dědící od BaseFormu

Do teď je to pěkné řešení, pokud si vystačím s DefaultFormRenderer, ale jak na to, pokud potřebuju manuál render, tedy vlastní šablonu formuláře? Je jediná možnost ještě ke každému formuláři udělat vlastní Control?

bojovyletoun
Člen | 667
+
0
-

neuronu jsem zahlídl pěkně řešení formuláře (ostatně je tam plno skvělých nápadů)- že prostě form má svoji šablonu.

stanley89
Člen | 6
+
0
-

řešení je sice pěkné, ale narazil jsem následující problém:

protected function createTemplate()
{
	return $this->getPresenter()->createTemplate()->setFile($this->getTemplateFile());
}

Metoda createTemplate() v presenteru je protected, takže se nezavolá. Věděl by někdo o vhodném řešení?

voda
Člen | 561
+
0
-

Můžeš si ji udělat ve svém BasePresenteru public

public function createTemplate() {
	return parent::createTemplate();
}
stanley89
Člen | 6
+
0
-

děkuji

Předpokládám že pokud metoda byla dříve public a teď je protected, tak je to z nějakého důvodu. Je v pořádku to takhle obejít?

voda
Člen | 561
+
0
-

Myslím že i dřív byla protected, v https://github.com/…resenter.php#L41 je to udělané stejně. Jestli bude public nebo protected je podle mne celkem jedno.

bojovyletoun
Člen | 667
+
0
-

mě třeba vadí, že Control::$template je jen read-only, protože by mi stačilo volat $this->template=$this->createtemplate("Templating\Template") → životní cyklus si ji sám vykreslí. Sice je hezké, že createtemplate byla upravena, aby se tam dala jednoduše předat vlastní ITemplate, jenže, tu templatu není možné vložit do this->template.

no a ten protekcionismus u createtemplate se mi taky nelíbí→ jde to obejít ještě takto

PS:
existuje pro totopublic function createTemplate(){return parent::createTemplate();} nějaká zkratka, aby se nemusela 2× psát název? (něco jako parent::__FUNCTION__ nebo forward_static_call?)

Editoval bojovyletoun (25. 11. 2011 18:32)

voda
Člen | 561
+
0
-

@bojovyletoun: můžeš udělat

function createTemplate() {
	return parent::createTemplate("Templating\Template");
}

pak budeš mít vlastní templatu i v $this->template