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
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
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
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;
}