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)); } } } }