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

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

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

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

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 :)

MartyIX
Člen | 217
+
0
-

Toto me zajima, protoze jsem to parkrat resil a diky za pekny reseni!