RadioList validace – nevykonání funkce

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

Dobrý podvečer,
mám problém u volání funkce po odeslání formuláře. Když mám nastavenou form validaci na RadioListu nic se kód se nezpracuje, vypnuli ji, všechno je v pořádku. Prosím o pomoc. Nevím čím to může být.

Formulář

class doplnkoveStylUceniForm extends UI\Form {

    public function __construct(IContainer $parent = NULL, $name = NULL, $odpovedi = NULL) {
      parent::__construct($parent, $name);
      $this->buildForm($odpovedi);
    }

    protected function buildForm($odpovedi){
        $this->addSubmit('submit','Vyhodnotit')
        ->setAttribute('class', 'Button Highlight')
        ->setHtmlId('tlac16');

          for($i=0;$i<count($odpovedi);$i++) {
            $this->addRadioList("radio".$i,$i,$odpovedi[$i])
                    ->setRequired('Vyberte odpověď u '.$i.'. otázky.');
                 //   ->addRule(Form::FILLED, 'Vyberte odpověď u '.$i.'. otázky.');
        }


    }
}

Presenter

private $otazky = array(
          'Otazka 1',
          'Otazka 2');

private $answers = array(
          null,
          array(1=>'odpoved A',2=>'odpoved B',3=>'odpoved C'),
          array(1=>'odpoved A',2=>'odpoved B',3=>'odpoved C')
);

protected function startup() {
        parent::startup();

	if ($this->action == "stylUceni")
        {
            $this->template->otazky = $this->otazky;
        }
}

protected function createComponentStylUceniForm($name){
        $form = new doplnkoveStylUceniForm($this,$name,$this->answers);
        $form->onSuccess[] = callback($this, 'doplnekUceniCheckFormSubmitted');
        $form->setAction( $this->link("Procvicovani:stylUceni2", array("do" => $name."-submit")));

        return $form;
    }

    public function doplnekUceniCheckFormSubmitted($form)
    {

        $values = $form->getValues();
         $this->flashMessage("Done");
    }

PHP verze: 5.3.13
Nette: 2.0.3

Editoval sadamek (4. 6. 2012 17:42)

bojovyletoun
Člen | 667
+
0
-

nic se kód se nezpracuje → prosím upřesni problém

sadamek
Člen | 16
+
0
-

resp. se nevykoná

$this->flashMessage("Done");
Aurielle
Člen | 1281
+
0
-

Pošli celý kód zpracovávající funkce.

natrim
Člen | 73
+
0
-

to $form->setAction( $this->link("Procvicovani:stylUceni2", array("do" => $name."-submit")));
úplně vyhoď a udělej přesměrování až po zpracování formu

public function doplnekUceniCheckFormSubmitted($form)
    {

        $values = $form->getValues();
.
.
.
      $this->flashMessage("Done");
      $this->redirect("Procvicovani:stylUceni2");
}

Editoval natrim (1. 6. 2012 10:10)

sadamek
Člen | 16
+
0
-

natrim napsal(a):

to $form->setAction( $this->link("Procvicovani:stylUceni2", array("do" => $name."-submit")));
úplně vyhoď a udělej přesměrování až po zpracování formu

public function doplnekUceniCheckFormSubmitted($form)
    {

        $values = $form->getValues();
.
.
.
      $this->flashMessage("Done");
      $this->redirect("Procvicovani:stylUceni2");
}

Redirect neproběhne vůbec. Vykoná se jen reload stránky, kde zůstanou vyplněné hodnoty. Ani žádná flashMessage se nezobrazí. Takhle to asi nepůjde.

sadamek
Člen | 16
+
0
-

gmvasek napsal(a):

Pošli celý kód zpracovávající funkce.

Nic víc tam není.

petr.pavel
Člen | 535
+
0
-

Já bych si tipnul, že formulář definuješ a vykresluješ v jednom presenteru/akci a pokoušíš se ho odeslat do jiného. Jenže tam ho nedefinuješ, takže se požadovaný signál nezpracuje. Střílím ale od boku.

Nevím, jestli dokumentace tenhle případ už pokrývá, v době, kdy já se učil Nette to tak nebylo a tak jsem napsal vlastní návod. Možná s tím souvisí i tohle.

Tenkrát jsem to psal i do dokumentace, ale vyhodili mě s tím :-)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Pokud ti proběhne jen reload a zůstanou vyplněné hodnoty, tak je možnost, že neprošla validace. Jak ten formulář vykresluješ?

sadamek
Člen | 16
+
0
-

stylUceni.latte

{form stylUceniForm}
 <div id="otazky">

{foreach $otazky as $q}
<table>
<tr><td><div class="nad"><b>{$q}</b></div></td></tr>
</table>
<table class="pt">
<tr><td>{$form['radio'.$iterator->counter]->getControl(1)}</td></tr>
<tr><td>{$form['radio'.$iterator->counter]->getControl(2)}</td></tr>
<tr><td>{$form['radio'.$iterator->counter]->getControl(3)}</td></tr>
</table>
{/foreach}

</div>
    <div id="tlac12">{input submit}</div>
{/form}

Na další stránce – stylUceni2.latte je jen text.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Oh yes :) Nevypisuješ si tam chyby formuláře:

{control $form errors}

Možná tam něco bude, pokud ano, tak je to důvod, proč se nezapnul onSuccess.

Editoval vojtech.dobes (4. 6. 2012 17:52)

sadamek
Člen | 16
+
0
-

Super :)
U formu jsem mel indexy od 0, ale při výpisu se foreach bere $iterator->counter od 1.
Proto jsem měl v poli $answers první hodnotu null. Lidská blbost je nekonečná. :)

Díky moc!