Problém s validací hodnoty z selectboxu při použití setItems

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

Mám stránku, která zobrazuje detailní informace o sportovní aktivitě a formulář pro doplnění značek k této aktivitě. Formulář obsahuje selectbox, jehož hodnoty jsou závislé na druhu zobrazené aktivity.
formulář definuji v presenteru takto:

protected function createComponentDetailZnackaForm()
{
  $form = new Form;
  $form->addSelect('znacka_id', 'Značka:')
      ->setRequired('Zadej značku.');

	$form->addSubmit('save', 'Uložit')->setAttribute('class', 'default');
	$form->addSubmit('cancel', 'Zrušit')->setValidationScope(NULL);
	$form->onSuccess[] = callback($this, 'detailAktivitaZnackaFormSubmitted');

	return $form;
}

dále mám v presenteru

public function renderDetail($id=0)
  {
...
    $form = $this['detailZnackaForm'];
    if (!$form->isSubmitted()) {
	$znacky=$this->getService('model')->getZnacky()->where("typ_id",$this->aktivity->get($id)->typ_id)->fetchPairs("id", "nazev");
	if (!$znacky) {
		throw new NA\BadRequestException('Znacky nenalezeny');
	}
	$form['znacka_id']->setItems($znacky);
      ...
    }
  }

Formulář se zobrazí správně, selectbox obsahuje správné hodnoty, v html zdroji stránky správně nadefinované, ale nejde odeslat, protože mi pořád hlásí „Zadej hodnotu značky.“, přestože v select boxu mám hodnotu vybranou. Testoval jsem, co se odesílá a znacka_id je opravdu prázdná.
Když ale naplnění select boxu přesunu už do „továrničky“,
tedy místo:

$form['znacka_id']->setItems($znacky);

v renderDetail metodě použiju:

$form->addSelect('znacka_id', 'Značka:',$znacky)

v createComponent
tak vše funguje jak má. V čem může být problém?

22
Člen | 1478
+
0
-

hodnoty formuláře se zásadně plní v action metodě. V render metodě už je pozdě.

edmund
Člen | 28
+
0
-

Tak ale jak to, že se mi selectbox naplní a zobrazí správně?

redhead
Člen | 1313
+
0
-

Zobrazí se správně, ale ve chvíli, kdy se formulář zpracovává po odeslání, tak ještě neví, jaké hodnoty selectbox má (zpracování se děje před render fází).

edmund
Člen | 28
+
0
-

Aha, chápu. Tak jak mám tedy řešit to, že v createcomponent nemohu mít plnění selectboxu natvrdo, protože hodnoty pro select box s¨závisí na druhu aktivity? Pres nějaký parametr? Něco jako createComponentDetailZnackaForm($typAktivity)? Jak to potom zavolat a kde?

uestla
Backer | 799
+
0
-

Přepiš renderDetail na actionDetail :-)

EDIT:

A umaž podmínku !$form->isSubmitted() – protože položky do selectu chceš přidávat vždy.

Editoval uestla (28. 8. 2011 23:32)