RadioList validace – nevykonání funkce
- sadamek
- Člen | 16
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)
- natrim
- Člen | 73
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
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í formupublic 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.
- petr.pavel
- Člen | 535
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
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
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
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)