Form – Select
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- phx
- Člen | 651
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…