public static function computeItem(FormType $_type, $_item) { $item = static::$prototype[$_type->__toString()]; $countPrototype = count($item); $item = array_merge($item, $_item); // jesli rozszerzono prototyp - zabron if (count($item) !== $countPrototype) { throw new \InvalidArgumentException("Too many fields!"); } // jesli nie podano nazwy - zabron if (array_key_exists("name", $item) && $item["name"] === "") { throw new \InvalidArgumentException("Empty name is forbidden!"); } //W values przy sprawdzaniu czy wybrano jedna z opcji sprawdzamy przez == a nie === - mozemy ustawic wartosc jako int'a, a w formularzu przekazuje sie string. //By nie bylo problemu na pustym stringu (0 == "") zabraniam podawac wartosci "" jako wartosc przy select/radio/checkbox. //Byc moze w przyszlosci zostanie to poprawione i bedziemy rozrozniac "0" !== "" - wymaga to konwersji kluczy do int'a. Do rozwazenia i przemyslenia. Przy PHP 5.2 byly przy takim podejsciu jakies problemy, nie pamietam niestety jakie :( if (array_key_exists("values", $item) && is_array($item["values"]) && array_key_exists("", $item["values"])) { throw new \InvalidArgumentException("Empty value for select/radio/checkbox is forbidden!"); } return $item; }