Nefungující callback funkce na formuláři

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
T3RMiX
Člen | 3
+
0
-

Zdravím,
v presenteru mám:

protected function createComponentContactForm() {
	$form = new Form;
	$form->addText('email', 'E-mail:')->addRule(Form::EMAIL, "Zadejte platný e-mail")->setRequired('Zadejte prosím e-mail');
	$form->addSubmit('send', 'Odeslat');
	$form->addProtection('Vypršel časový limit, odešlete formulář znovu');
	$form->onSuccess[] = callback($this, 'sendMail');
	return $form;
}

public function sendMail(Form $form) {
	die;
	...nějaký kód na odeslání e-mailu
}

ale sendMail() se po odeslání formuláře nevyžádá – aplikace se nezastaví?! Co dělám špatně?
PHP 5.3.6–13 / Nette 2.0.1

frosty22
Člen | 373
+
0
-

Neodchytí se signál odeslaného formuláře, jelikož není správně připojen k presenteru (snad nekecám) zkus takto:

<?php
protected function createComponentContactForm($name) {
        $form = new Form($this, $name);
        $form->addText('email', 'E-mail:')->addRule(Form::EMAIL, "Zadejte platný e-mail")->setRequired('Zadejte prosím e-mail');
        $form->addSubmit('send', 'Odeslat');
        $form->addProtection('Vypršel časový limit, odešlete formulář znovu');
        $form->onSuccess[] = callback($this, 'sendMail');
        return $form;
}

public function sendMail(Form $form) {
        die;
        ...nějaký kód na odeslání e-mailu
}
?>

BTW a předpokládám, že v USE máš namespace Nette\Application\UI\Form a ne \Nette\Forms\Form, případně změň :)

Ascaria
Člen | 187
+
0
-

Jelikož máš PHP 5.3, můžeš zkusit třeba i jiný approach:

protected function createComponentContactForm() {
        $form = new Form;
        $form->addText('email', 'E-mail:')
            ->addRule(Form::EMAIL, "Zadejte platný e-mail")->setRequired('Zadejte prosím e-mail');
        $form->addSubmit('send', 'Odeslat');
        $form->addProtection('Vypršel časový limit, odešlete formulář znovu');

        $presenter = $this->presenter;
        $form->onSuccess[] = function(Form $form) use($presenter){
            die;
            // ...nějaký kód na odeslání e-mailu
            $presenter->redirect('this');
        }
        return $form;
}