Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:9.3.2014 11:03

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:11.3.2014 16:18

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:11.3.2014 16:46
$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
Odpovídá na Jan Demel
Drahomír Hanák:11.3.2014 16:51
$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
11.3.2014 16:51
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Jan Demel:11.3.2014 20:42

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.