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 | 817
+
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 | 817
+
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 | 817
+
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");
?>