Formuláře – vložení defaultních hodnot při vytváření formulář

Webster.K
Člen | 192
+
0
-

Zdravím všechny, řeším vložení defaultních hodnot do formuláře, našel jsem $form->setDefaults(), to funguje správně do doby, než se mi stane, že jeden ze selectboxů není povinný a tak se do databáze ukládá místo jeho hodnoty 0 (všechny hodnoty jsou číselné, protože se na ně vážou další záznamy tak abych neměl v DB tisíckrát za sebou stejné jména, ukládám jen číselné ID z jiné tabulky). Když to ale dám sem, do $form->setDefaults() data dostávám z DB přes fetch(). Tam se 0 ukáze jako problém a vyhodí to chybu Value ‚0‘ is out of allowed set [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,…] in field. Napadá někoho jak to vyřešit? Napadlo mě do tabulky dát ID0, ale to mi přijde jako děsná kravina :/

duke
Člen | 650
+
-2
-

Tato kontrola se dá vypnout pomocí:

$selectBox->checkAllowedValues = FALSE;
Webster.K
Člen | 192
+
0
-

Aha, díky :) už to funguje jak ma :)

CZechBoY
Člen | 3608
+
+2
-

No radši bych teda z pole vyříznul všechny nevyplněné volitelné hodnoty než povolovat vložení čehokoliv bez ověření jestli jsem to uživatelovi dovolil nebo ne.

$row = $model->getAbc();
foreach ($row as $key => $value) {
    if ($value === null && isOptional($key)) {
		unset($row[$key]);
	}
}
$form->setDefaults($row);
duke
Člen | 650
+
+1
-

CZechBoY napsal(a):

No radši bych teda z pole vyříznul všechny nevyplněné volitelné hodnoty než povolovat vložení čehokoliv bez ověření jestli jsem to uživatelovi dovolil nebo ne.

$row = $model->getAbc();
foreach ($row as $key => $value) {
    if ($value === null && isOptional($key)) {
		unset($row[$key]);
	}
}
$form->setDefaults($row);

Souhlasím, že lepší řešení je nepovolené hodnoty (v tomto případě 0) prostě nenastavovat.
Výše uvedený kód však neodfiltrovává problematické 0, ale neproblematické null.
Tzn. lépe takto:

$row = $model->getAbc();
$zeroMeansNoneFields = array('foo', 'bar', 'baz');
foreach ($zeroMeansNoneFields as $key) {
	if (isset($row[$key]) && $row[$key] === 0) {
		unset($row[$key]));
	}
}
$form->setDefaults($row);