Example #1
0
 public static function enhanceFromEntity(Form $form, $entity, $filter = "", $fields = TRUE, Loops $loops = NULL)
 {
     if (!$loops) {
         $loops = Loops::getCurrentLoops();
     }
     $classname = is_object($entity) ? get_class($entity) : $entity;
     $properties = $loops->getService("annotations")->get($classname)->properties;
     $metadata = $loops->getService("doctrine")->getMetadataFactory()->getMetadataFor($classname);
     //find elements
     $elements = $form->getFormElements();
     //add missing fields that are requested and have metadata
     if ($fields === TRUE) {
         $missing_fields = array_diff(array_keys($metadata->fieldMappings), array_keys($elements));
     } else {
         $missing_fields = array_intersect(array_diff((array) $fields, array_keys($elements)), array_keys($metadata->fieldMappings));
     }
     foreach ($missing_fields as $name) {
         if (!empty($metadata->fieldMappings[$name]['id'])) {
             continue;
         }
         if (!$entity->offsetExists($name)) {
             $classname = get_class($entity);
             throw new Exception("Failed to create Element for Entity '{$classname}'. Property '{$name}' is not accessible.");
         }
         $elements[$name] = self::addMissingElement($form, $entity, $loops, $name, $metadata->fieldMappings[$name], $properties->{$name}, $filter, FALSE);
         if (!$form->value->offsetExists($name)) {
             $form->value->offsetSet($name, $elements[$name]->getValue());
         }
     }
     //add missing accociations
     $missing_assoc = array_intersect(array_diff((array) $fields, array_keys($elements)), array_keys($metadata->associationMappings));
     foreach ($missing_assoc as $name) {
         $elements[$name] = self::addMissingElement($form, $entity, $loops, $name, $metadata->associationMappings[$name], $properties->{$name}, $filter, TRUE);
         if (!$form->value->offsetExists($name)) {
             $form->value->offsetSet($name, $elements[$name]->getValue());
         }
     }
     //enhance fields
     foreach ($elements as $name => $element) {
         self::enhanceLabelFromName($element, $name);
         if (array_key_exists($name, $metadata->fieldMappings)) {
             self::enhanceDescriptionFromComment($element, $metadata->fieldMappings[$name]);
         }
     }
 }
Example #2
0
 function testFormElementsQuickAccess()
 {
     $app = new WebApplication(__DIR__ . "/app", "/");
     $form = new Form(new TestEntity());
     $this->assertSame($form->elements, $form->getFormElements());
 }