Problem s create a onSubmit action

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

Zdravim,

mam formular v Presenteru (formular obsahuje pouze Checkboxy a tlacitko onSubmit). Kdyz chci aby byl checkbox vybrany, udelam v „createForm“ metode tohle: $form->addCheckbox(‚Nazev‘, ‚Nazev‘)->setValue(1); Kdyz nevybrany, udelam: $form->addCheckbox(‚Nazev‘, ‚Nazev‘)->setValue(0);. Tohle funguje, jsou vybrany/nevybrany jak potrebuji.

Problem nastava, kdyz manualne vyberu nektere dalsi checkboxy a kliknu na submit:

  • v metode ktera je namapovana na onSubmit, nemam vybrane checkboxy, ktere jsem manualne naklikal… Tzn, kdyz zavolam $values = $form->getValues();, tak v $values jsou komponenty nastaveny tak, jak jsem je nastavil v „createForm“ metode.

Napada nekoho co by mohlo byt spatne? Predem moc diky.

Chbox
Člen | 125
+
0
-

pošli kód…

gerades
Člen | 40
+
0
-
public function adjustTableFormSubmitted(AppForm $form) {
        if ($form['ok']->isSubmittedBy()) {
            $values = $form->getValues();
	    foreach ($values as $key => $value) {
		// a tady neni co bylo manualne vybrano...
	    }
        }
}

protected function createComponentAdjustTableForm($name) {
        $form = new AppForm($this, $name);
        $columnNames = $this->dataSource->result->getInfo()->getColumnNames();
        foreach ($columnNames as $key => $value) {
                $item = $this->getColumn($value); // metoda, ktera vrati sloupec z Gridito, pokud tam neni, tak null
                if (isset($item)) {
                    $form->addCheckbox($value, $value)->setValue(1);
                } else {
                    $form->addCheckbox($value, $value)->setValue(0);
                }
        }
        $form->addSubmit("ok", "Apply");
        $form->onSubmit[] = array($this, 'adjustTableFormSubmitted');
        return $form;
 }
Chbox
Člen | 125
+
0
-

tak pokud tam máš natvrdo setValue(0), tak ti to bude vždycky vracet FALSE a nebude brát ohled na hodnoty z DB ani z user inputu

Zkus si vytahnout hodnoty přes $this->getHttpRequest()->post a pak podle toho to bud naplnit hodnatama z post nebo z DB, kdyz je to prvni zobrazeni..

Editoval Chbox (25. 2. 2011 23:01)

voda
Člen | 561
+
0
-

Výchozí hodnoty formuláře nastavuj až v ‚render…‘ metodě pomocí ‚$form->setDefaults‘

<?php
public function renderDefault() {
	$this['adjustTableForm']->setDefaults(array(
		'nazevInputu' => 'výchozí hodnota',
		...
	));
}
?>
gerades
Člen | 40
+
0
-

Chbox napsal(a):
tak pokud tam máš natvrdo setValue(0)

No a jak muzu odznacit checkbox, kdyz nemuzu pouzit setValue(0)?

A predpokladam, ze kdys nastavim setValue(1) tak to zase nemuzu odznacit, ze? Jak to teda funtuje??? :) To mi hlava nebere…

Editoval gerades (26. 2. 2011 9:45)

Chbox
Člen | 125
+
0
-

tady máš příklad, kterej bez problému funguje, akorát stačí naplnit $data vlatní hodnotou..

protected function createComponentForm($name)
{
		$data = array(
			'a' => TRUE,
			'b' => FALSE,
			'c' => TRUE,
			'd' => FALSE,
		);


		$form = new AppForm($this, $name);
		foreach($data as $key => $item) {
			$form->addCheckbox($key, $key);
		}

		$form->addSubmit('ok', 'Odeslat')
			->onClick[] = callback($this, 'sendForm');

		$form->setDefaults($data);
}

public function sendForm(SubmitButton $form)
{
		$data = $form->form->values;
		Debug::dump($data);
}
Chbox
Člen | 125
+
0
-

jinak plnit data formuláře v metodě render je pozdě, musíš to udělat v action, viz. životní cyklus presenteru..pokud by jsi to chtěl plnit někde později nebo v nějakým handleru.

Editoval Chbox (26. 2. 2011 9:51)

gerades
Člen | 40
+
0
-

Diky, tento problem vyresen :-)