Nezpracuje se formulář po odeslání

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

Zdravím,
nějak nemohu přijít na to, proč se mi nezpracuje formulář. Jedná se o globální chat, proto je formulář v BasePresenteru. Jde o to, že se formulář odešle, ale metoda chatFormSubmitted vůbec nezavolá.

    public function chatFormSubmitted(Form $form) {
        $values = $form->getValues();
        print_r($values);
        exit;
        $user = $this->getUser();
        try {
            $this->chatRepository->insert(array('text' => $values->message,
                                                'time' => time(),
                                                'user_id' => $user->id,
                                                'name' => $user->username));
            $this->flashMessage('Zpráva odeslána', 'success');
            $this->redirect('this');
        } catch (NAuthenticationException $e) {
            $form->addError('Chyba');
        }
    }

    protected function createComponentChatForm() {
        $form = new NForm();
        //$form->setMethod('GET');
        $form->addText('message', '', 20)
                ->addRule(NForm::FILLED, 'Nelze odeslat prázdnou zprávu.');
        $form->addSubmit('sendmessage', '');
        $form->onSuccess[] = $this->chatFormSubmitted;
        return $form;
    }

V @layout.latte mám

    {snippet}
    {form chatForm}
        <div class="chat-form">
            {control $form errors}
            {input message} {input sendmessage}<div class="hidden"></div>
        </div>
    {/form}
    {/snippet}

Nette 2.0.7. pro PHP 5.2. PHP na localu mám asi 5.3.
Vytvářím stránky pro hosting z PHP 5.2.

Co dělám špatně? Díky za odpověď

Badaboom
Člen | 33
+
0
-
public function chatFormSubmitted(Form $form) {...}

NForm x Form?

Editoval Badaboom (29. 12. 2012 21:56)

Vanamas
Člen | 20
+
0
-

Tohle je chyba, ale neřeší to můj problém. Prostě se z nějakého důvodu metoda na zpracování formuláře vůbec nezavolá. Kdyby se volala, laděnka by mi tuto chybu hned zahlásila.

Každopádně díky.

Editoval Vanamas (29. 12. 2012 22:03)

ViPEr*CZ*
Člen | 822
+
0
-

Co je v action toho formu?

Vanamas
Člen | 20
+
0
-

Teď si nejsem jist co máte na mysli. Tohle?

<form action="" method="post" novalidate="">        <div class="chat-form">
            <input type="text" size="20" class="text" name="message" id="frmchatForm-message" required="required" data-nette-rules="{op:':filled',msg:&quot;Nelze odeslat pr\u00e1zdnou zpr\u00e1vu.&quot;}" value="dhgd"> <input type="submit" class="button" name="sendmessage" id="frmchatForm-sendmessage" value="Odeslat">
        </div>
<div><!--[if IE]><input type=IEbug disabled style="display:none"><![endif]--></div>
</form>
Badaboom
Člen | 33
+
0
-

Aha, ekvivalent třídy Nette\Application\UI\Form pro 5.2 je třída Nette\Application\UI\AppForm, takže:

$form = new NAppForm();

https://api.nette.org/…AppForm.html

ViPEr*CZ*
Člen | 822
+
0
-

Použijte místo NForm tuto třídu NAppForm.
PS: no byl jsem pomalejší… musel jsem si stáhnout verzi pro 5.2 :-)

Editoval ViPEr*CZ* (29. 12. 2012 22:30)

Vanamas
Člen | 20
+
0
-

Děkuji, už se to posílá. Musím ale pořešit další chyby. S tím si ale nějak poradím, snad. Potom musím ještě nahodit ajax pro odesílání, tak snad se u toho nezaseknu.

btw myslel jsem, že ke všemu stačí přiřadit prefix N.

ViPEr*CZ*
Člen | 822
+
0
-

Vanamas napsal(a):

Děkuji, už se to posílá. Musím ale pořešit další chyby. S tím si ale nějak poradím, snad. Potom musím ještě nahodit ajax pro odesílání, tak snad se u toho nezaseknu.

btw myslel jsem, že ke všemu stačí přiřadit prefix N.

No většinou by mělo, ale Nette má dvě třídy Form pro PHP 5.3, ale každou v jiným namespace a v 5.2 namespace není, tak to je takto rozlišený.

natrim
Člen | 73
+
0
-

mas tam chybu

<?php
$form->onSuccess[] = $this->chatFormSubmitted;
?>

ma byt

<?php
$form->onSuccess[] = array($this, "chatFormSubmitted");
?>