Diskuze: Nette nedokáže zavolat metodu při správném odeslání formu ?

PHP Nette Framework Nette framework Nette nedokáže zavolat metodu při správném odeslání formu ?

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Zdarec lidi. Narazil jsem v Nette na naprosto nepochopitelný problém. Mám vytvořenou metodu, která vrací formulář $form. Formulář má nastavené, že při správném odeslání se zavolá metoda commentFormSuc­ceded... Jenomže ona se jakoby vůbec nevolá. Dokázal by mi tu někdo prosím poradit ?

//Vytvoří formulář pro komentáře
        public function createComponentCommentForm()
        {
                $form = new Form();
                $form->addText('name', 'Jméno:')
                        ->setRequired();
                $form->addText('email', 'Email:')
                        ->setRequired();
                $form->addTextArea('content', 'Komentář:', 50, 10);
                $form->addSubmit('send', 'Odešli komentář');

                $form->onSuccess[] = $this->commentFormSucceded;
                return $form;
        }

        //Pokud byl formulář správně vyplněn, odešle se tato metoda
        public function commentFormSucceded($form)
        {
                $values = $form->getValues();
                $postId = $this->getParameter('postId');

                $this->database->table('comments')->insert(array(
                        'post_id' => $postId,
                        'name' => $values->name,
                        'email' =>  $values->email,
                        'content' => $values->content,
                ));

                $this->flashMessage('Děkuji za komentář', 'success');
                $this->redirect('this');
        }
Odpovědět 9.3.2014 11:03
To co se zdá být nemožné, je vždy možné.
Avatar
Vojtěch Novák:

Ahoj.

Zkusil jsi použít laděnku?

Editováno 11.3.2014 16:20
 
Nahoru Odpovědět 11.3.2014 16:18
Avatar
thejoeejoee
Člen
Avatar
thejoeejoee:
$form->onSuccess[] = commentFormSucceded

se volá pouze při validním odeslání, tzn. zkus to nahradit na

$form->onSubmit[] = commentFormSucceded

a zjistit, např. pomocí

Debugger::dump($form)

zda se vůbec nějaká metoda zavolala.

Editováno 11.3.2014 16:47
 
Nahoru Odpovědět 11.3.2014 16:46
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
Drahomír Hanák:
$form->onSuccess[] = $this->commentFormSucceded;

Jakou máš verzi Nette? V PHP si nemůžeš takhle uložit referenci na funkci. Nette to jedu dobu překládalo (jen v presenterech) na callback. Od toho se ale ustoupilo, protože pak překrývaly stejnojmenné vlastnsti. Použij radši PHP callback:

$form->onSuccess[] = array($this, 'commentFormSucceded');
Editováno 11.3.2014 16:52
 
Nahoru Odpovědět  +1 11.3.2014 16:51
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Jan Demel:

Solved. Vůbec to nebyl problém callbacku. Měl jsem špatně vytvořený form. Používal jsem Nette\Forms\Form místo Nette\Applica­tion\UI\Form ;)

Nahoru Odpovědět 11.3.2014 20:42
To co se zdá být nemožné, je vždy možné.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.