/** * Object constructor * * @param string * @param array */ protected function __construct($name, array $config = array()) { // Grab the form attributes $formAttributes = Arr::get($config, 'form_attributes', array()); $this->form = new Form(); $this->form->setAttributes($formAttributes); $this->form->setName($name); }
/** * Builds a form for a class * * @param string $class * @param Form $form */ public function buildForm($class, Form $form) { $classMetadata = $this->metadataFactory->getMetadataForClass($class); $propertyMetadata = $classMetadata->propertyMetadata; $data = []; $attributes = $classMetadata->attributes; $attributes['action'] = $classMetadata->action; $attributes['method'] = $classMetadata->method; $form->setAttributes($attributes); foreach ($classMetadata->fieldsets as $name => $fieldset) { $fieldset['type'] = 'fieldset'; $fields = $fieldset['fields']; unset($fieldset['fields']); foreach ($fields as &$field) { if (!isset($propertyMetadata[$field])) { throw new \RuntimException(sprintf('%s is expected to have a(n) %s field', $class, $field)); } $fieldset['content'][$field] = $this->buildFormField($propertyMetadata[$field]); unset($propertyMetadata[$field]); } $data[$name] = $fieldset; } // Process fields // If no fieldsets are in use, this processes all fields // Otherwise fieldset fields are processed above // (Ideally fieldsets should be used for all or none fields) foreach ($propertyMetadata as $propertyName => $pMetadata) { $data[$propertyName] = $this->buildFormField($pMetadata); } $generatedForm = $this->formBuilder->generate($data); $form->setContents($generatedForm); }