Exemple #1
0
 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;
 }
Exemple #2
0
 public function add(FormType $_type, $_options)
 {
     static $added = array();
     $item = FormType::computeItem($_type, $_options);
     if (array_key_exists("name", $item)) {
         if (isset($added[$item["name"]])) {
             throw new \InvalidArgumentException("Name '{$item["name"]}' already exists!");
         }
         $added[$item["name"]] = true;
     }
     $item["type"] = $_type;
     $this->items[] = $item;
 }