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

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

ten form musi byt jako podkomponenta, viz https://doc.nette.org/…s/form-reuse#…

nanuqcz
Člen | 822
+
0
-

Není na tomto řádku překlep? (místo $sf má být $sfc)

$sf->form->onSuccess[] = $this->searchFormSucceeded;
dr3ex
Člen | 8
+
0
-

Chtěl bych vidět, jak by vypadal kód pro můj případ. Ať dělám co dělám nefunguje to.

jiri.pudil
Nette Blogger | 1032
+
0
-

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;
}
dr3ex
Člen | 8
+
0
-

Díky moc! To je přesně co jsem potřeboval.