Odvozování formulářů v Nette 2.0 beta
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- semtex.989
 - Člen | 75
 
Ve starších verzích Nette (alpha 2.0) jsem si nadefinoval např.
komponentu insertForm.
Pak jsem používal i editForm, který byl totožný, ale např. měl disabled
dva prvky.
Tak jsem editForm „podědil“ od insertForm takto:
<?php
public function createComponentInsertForm(){
    $form = new AppForm($this, 'insertForm'); // nyní UI\Form
    ....
    return $form;
}
public function createComponentEditForm(){
    $form = $this['insertForm'];
    $this->addComponent($form, 'editForm');
    $form['submit']->setDisabled();
    return $form;
}
?>
Tahle technika ale ve verzi 2 beta nefunguje. Dá se to řešit jinak než pastnout znovu skoro stejný createComponentX() ?

- Filip Procházka
 - Moderator | 4668
 
To není úplně ideální… co takhle?
protected function createComponentInsertForm()
{
    $form = new Nette\Application\UI\Form;
    ....
    return $form; // připojení do presenteru
}
protected function createComponentEditForm()
{
	$form = $this->createComponentInsertForm();
	// vznikne nová instance, ale nepřipojí se,
	// protože ji nevolá presenter
	// upravíš formulář
	$form['submit']->setDisabled();
	// ...
	return $form; // připojí se až zde
}
Pointou je, že nebudeš komponentu připojovat, ale necháš to na presenteru. Pak můžeš zavolat továrničku a formulář si dopracovat jak potřebuješ.

- semtex.989
 - Člen | 75
 
No já si všiml, že už se do konstruktoru nepředává žádný parametr. To se budu ještě muset mrknout jak to funguje.

- Filip Procházka
 - Moderator | 4668
 
Ty ho tam můžeš předat, ale když ho tam nepředáš, tak se s tím lépe pak pracuje, tak jak jsem naznačil :)