Multiplier form – manuální vykreslení
- Etruska
- Člen | 25
Zdravím,
řeším problém s dynamickým vytvářením formulářů pomocí Multiplieru.
Potřebuji manuální vykreslování, šablona vypadá nějak takto:
{foreach $photos as $photo}
{form descriptionForm-$photo->id, class => "form-horizontal form-one-column"}
...
{/form}
{/foreach}
Formuláře pak vytvářím tímto způsobem:
protected function createComponentDescriptionForm($name) {
$parent = $this;
return new \Nette\Application\UI\Multiplier(function ($photoId) use ($parent, $name) {
return new DescriptionForm($parent->service, $parent->id, $photoId, $parent, $name);
});
}
Nicméně pokud pak v DescriptionForm zavolám konstruktor předka
parent::__construct($parent, $name);
, ozve se mi
chyba: Component with name 'descriptionForm' already exists.
Formulář potřebuji připojit k Presenteru protože mu nastavuji
setAction()
. Je tenhle způsob vytváření formuláře
nepodporovaný nebo mám jen někde chybu? Díky za odpověď.
- Vojtěch Dobeš
- Gold Partner | 1316
Chybí klíčová část hádanky, kostruktor toho
DescriptionForm
:). S ním se to podaří rozřešit.
- Etruska
- Člen | 25
Nedával jsem ho, protože ta chyba vyskočí hned u
parent::__construct
, ale tady je:
public function __construct(\EstatesService $service, $estateId, $photoId, $parent, $name) {
parent::__construct($parent, $name);
$this->estateId = $estateId;
$this->photoId = $photoId;
$this->estatesService = $service;
$this->addText("description", "Popis:");
$this->setAction($this->presenter->link('Estates:edit', array('id' => $estateId, 'showTab' => 'photos', 'do' => 'photos-descriptionForm-submit')));
$this->addSubmit('post', "Uložit údaje");
$this->onSuccess[] = callback($this, 'formSubmitted');
}
Důležité tam je, že potřebuji ručně nastavit setAction a to, jak jsem vydedukovoval, nejde bez připojení k Presenteru.
- Vojtěch Dobeš
- Gold Partner | 1316
Každý z těch drobných formuláříků má v názvu jiný
$photoId
– ten musí být také dál předán do
konstruktoru. Tedy:
return new \Nette\Application\UI\Multiplier(function ($photoId, $parent) {
return new DescriptionForm($parent->service, $parent->id, $photoId, $parent);
});
public function __construct(\EstatesService $service, $estateId, $photoId, $parent)
{
parent::__construct($parent, $photoId);