예제 #1
0
파일: Fieldset.php 프로젝트: fuelphp/legacy
 /**
  * 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);
 }
예제 #2
0
 /**
  * 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);
 }