addSelect ⇒ setDefaults ⇒ Value '' is out of allowed set

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

Zdravim,

nesetkavam se s tim poprve, kdy se nejakym nedopatrenim do selectu pri volani setDefaults cpe hodnota, ktera v nem neni pritomna, viz:

<?php
Nette\InvalidArgumentException

Value '' is out of allowed set ['Od prodejce', 'Od přátel, známých', 'Reklama na prodejním autě', ...] in field 'found_out_via'
?>

Muzu sice odchytavat vyjimku, a pote notifikovat uzivatele, ale to mi neprijde jako elegantni reseni. Jak se s timto problemem vyporadavate vy?

Diky

cendak
Člen | 21
+
+1
-

Jde o to, že select je naopak chytrý v tom, že si nenechá vnutit jinou hodnotu, než s jakou byl vytvořen ve formu, což je důležité pro bezpečnost.

Nastavování default value se dá oštřit například takto:

		// set default value $testDefaultValue
		if (array_key_exists($testDefaultValue, $form["test"]->getItems()) )
		{
			$form["test"]->setDefaultValue($testDefaultValue);
		}

Chování by se dalo nehezky obejít tak, že budeš data načítat přímo z getHttpData() a tu kontrolu oboru hodnot vypnout a obejít, ale osobně tuhle techniku nepovažuji za šťastnou a nikdy bych ji nepoužil. V tvém případě by bylo nejlepší nabízet buď jednu volbu ze selectu, nebo text input pro jiné.