示例#1
0
 public function addFormElement($builder, $property_name, array $_options = null, $type = null)
 {
     $options = $this->getFormBuilderOption($property_name);
     if (!$options) {
         throw new \Exception(sprintf("%s->%s not exists", $this->name, $property_name));
     }
     if (null === $type) {
         $type = $options['sf_form_type'];
     } else {
         if ($type === 'sf_view') {
             $options = array('label' => $options['label']);
         }
     }
     $subscribers = null;
     if (isset($options['subscribers'])) {
         $subscribers = $options['subscribers'];
         unset($options['subscribers']);
     }
     $constraints = null;
     if (isset($options['constraints']) && isset($_options['constraints'])) {
         $constraints = array();
         foreach ($options['constraints'] as $constraint) {
             $constraints[get_class($constraint)] = $constraint;
         }
         foreach ($_options['constraints'] as $constraint) {
             $constraints[get_class($constraint)] = $constraint;
         }
         unset($options['constraints']);
         unset($_options['constraints']);
     }
     if ($_options) {
         \Dev::merge($options, $_options);
     }
     if (isset($options['required']) && $options['required']) {
         $constraint = new \Symfony\Component\Validator\Constraints\NotBlank();
         if (!$constraints) {
             $constraints = array();
         }
         $constraints[get_class($constraint)] = $constraint;
     }
     if ($constraints) {
         $options['constraints'] = array_values($constraints);
     }
     $builder->add($property_name, $type, $options);
     if ($subscribers) {
         $_builder = $builder->get($property_name);
         foreach ($subscribers as $subscriber) {
             $events = $subscriber->getSubscribedEvents();
             foreach ($events as $_event => $method) {
                 $_builder->addEventListener($_event, array($subscriber, $method));
             }
         }
     }
 }