Nefunkční onSuccess pro formulář v komponentě
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- dr3ex
- Člen | 8
Ahoj, snažím se vytvořit komponentu pro vykreslení formuláře, kterou pak budu moci používat v celé aplikaci. Komponenta se vykreslí, akorát nefunguje volání funkce onSuccess po odeslání formuláře. Nevíte někdo prosím čím by to mohlo být?
Mám následující komponentu s formulářem:
<?php
class SearchFormControl extends Nette\Application\UI\Control
{
public $form;
public function __construct()
{
parent::__construct();
$this->form = new Nette\Application\UI\Form;
...
$this->form->addSubmit('search', 'Vyhledat')
}
public function render()
{
$this->template->form = $this->form;
$this->template->setFile(__DIR__ . '/SearchForm.latte');
$this->template->render();
}
}
?>
Šablonu s vlastním vykreslováním:
<?php
{form $form}
...
{/form}
?>
A v presenteru vytvářím a obsluhuji:
<?php
protected function createComponentSearchForm()
{
$sfc = new SearchFormControl(false);
$sf->form->onSuccess[] = $this->searchFormSucceeded;
return $sfc;
}
public function searchFormSucceeded($form)
{
$values = $form->getValues();
...
}
}
?>
- David Matějka
- Moderator | 6445
ten form musi byt jako podkomponenta, viz https://doc.nette.org/…s/form-reuse#…
- jiri.pudil
- Nette Blogger | 1032
Komponenta:
class SearchFormControl extends Nette\Application\UI\Control
{
protected function createComponentForm()
{
$form = new Nette\Application\UI\Form;
// ...
$form->addSubmit('search', 'Vyhledat');
return $form;
}
public function render()
{
$this->template->setFile(__DIR__ . '/SearchForm.latte');
$this->template->render();
}
}
Šablona (například):
{control form}
Presenter:
protected function createComponentSearchForm()
{
$sfc = new SearchFormControl;
$sfc['form']->onSuccess[] = $this->searchFormSucceeded;
return $sfc;
}