Proč se nevolá metoda odeslání formuláře?

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

Ahoj 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 commentFormSucceded… Jenomže ona se jakoby vůbec nevolá. Dokázal by mi tu někdo prosím poradit ? Všechno jsem dělal přesně tak, jak je to v tutoriálu.

<?php
//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');
        }
?>
Mysteria
Člen | 797
+
0
-

Zkus nahradit $form->onSuccess[] za $form->onSubmit[], pokud se pak metoda provede, tak to selhává na nějaké validaci.

HonDem
Člen | 30
+
0
-

Neprovedla se.

Michal Vyšinský
Člen | 608
+
0
-

Používáš Nette\Application\UI\Form nebo Nette\Forms\Form ? V presenterech bys měl použít to první.

HonDem
Člen | 30
+
0
-

Jojo už jsem na to přišel. Mělo to vypadat takto: $form = new Nette\Application\UI\Form; a né $form = new Form;

Michal Vyšinský
Člen | 608
+
0
-

No může to klidně vypadat new Form ale na začátku souboru musíš mít

use Nette\Application\UI\Form;

namísto

use Nette\Forms\Form;
Dismember
Člen | 50
+
0
-

ahoj,

narazil jsem také na tento problém.

Mám formulář v presenteru a když ho vykreslím automaticky pomocí

<?php
{control registraceLektora}
?>

tak se požadavaná onSuccess zavolá a vše proběhne podle mých pokynů.

Když ale formulář vykreslím ručně, tak se mi onSuccess nevolá.

Mám to nějak takto:

<?php
public function createComponentRegistraceLektora() {

        $form = new Nette\Application\UI\Form;
        $form->addText('name', "Jméno")
                //->setRequired('Zadejte prosím Vaše jméno')
                ->setAttribute('placeholder', "Vaše jméno")
                ->getControlPrototype()->class('form-control');
        $form->addText('surname', "Příjmení")
                ->setAttribute('placeholder', 'Vaše příjmení')
                ->getControlPrototype()->class('form-control');
        ...

        $form->addSubmit('submit', 'Registrovat')
                ->getControlPrototype()->class('btn btn-default');

        $form->onSuccess[] = array($this, 'registraceLektoraSubmitted');

        return $form;
    }

    public function registraceLektoraSubmitted(Form $form) {
        $values = $form->getValues();

        $this->repository->vlozLektora(...);
        $this->flashMessage('Odesláno');
        $this->redirect("Homepage:");
    }
?>

Prošel jsem fórum a vyzkoušel jsem mnohé tipy.
Do templejtu formulář předávám

<?php
$this->template->form = $this['registraceLektora'];
?>

Můžete mi, prosím, nějak pomoci?
Formuláře ručně vykresluji a zpracovávám docela často, ale toto se mi ještě nestalo.

Díky za pomoc!

Majkl578
Moderator | 1364
+
+1
-

Když ale formulář vykreslím ručně

A jak? Asi ho vykresluješ ručně špatně.
A příště si založ vlastní téma, nevytahuj 5 měsíců staré.

Šaman
Člen | 2666
+
0
-
  1. Do šablony formulář ručně nepředávej, to řeší továrnička.
  2. Jak ho vykresluješ?
Dismember
Člen | 50
+
0
-

Majkl578: Myslel jsem, že je lepší, aby stejný problém byl ve stejném vláknu

Ručně vykresluju v template:

<?php
{form registraceLektora}
    <ul class="errors" n:if="$form->hasErrors()">
        <li n:foreach="$form->errors as $error">{$error}</li>
    </ul>
    <div class="row">
        <div class="col-xs-12">
            <form class="form-horizontal" role="form">
                <div class="form-group">
                    <div class="col-sm-10">
                        <div class="row pad-0">
                            <div class="col-xs-4">{label name /}{input name}</div>
                            <div class="col-xs-4">{label surname /}{input surname}</div>
                        </div>
                    </div>
                </div>
...
...
<div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <br/>
                        {input submit}
                    </div>
                </div>
            </form>
        </div>

    </div>
    {/form registraceLektora}
?>
Dismember
Člen | 50
+
0
-

Už to mám :-D když to tady vidím, tak mi tam zůstal ještě jeden <form> … </form>

Sakra, celé odpoledne kvůli takové blbosti…