Form – Select

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

Zdravim…

Nalezl jsem chybu. Kdyz u formularu pouzivate select a date do nej data a vyuzijete skipFirst. Tak JS spravne nuti vybrat jakykoliv jen NE první. Ale PHP to validuje tak, ze nutí vybrat jakýkoliv jen NE poslední.

Problem je ve metode Select->setValue($value)

// items.php radek 1019
public function setValue($value)
{
	$allowed = $this->allowed;
	if ($this->skipFirst) array_shift($allowed);
	$this->value = isset($allowed[$value]) ? $value : NULL;
}

pole $alloweb obsahuje value=>TRUE. Kde dle toho je rozhodnuto zda hodnota v POST je validni. Pri zapnuti skipFirst se na pole pusti array_shift(), jenze tato fce nejen, ze odstrani prvni zaznam z pole $alloweb, ale pokud jsou value ciselne tak provede i precislovani!

Cele se to deje jen kdyz value posilane selektem jsou cisla (ID). Coz je asi vetsinou.

Oprava:

public function setValue($value)
{
	$allowed = $this->allowed;
	if ($this->skipFirst) {
		reset($allowed);
		unset($allowed[key($allowed)]);
	}
	$this->value = isset($allowed[$value]) ? $value : NULL;
}

Nebo delam ja nekde chybu? Prtz Davidovi to na prvni Nette prednasce fungovalo…

phx
Člen | 651
+
0
-

Davide tato chyba v Nette neni stale opravena. Celkem zasadni chyba…

David Grudl
Nette Core | 8082
+
0
-

Díky, chyba je opravena.