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