Exemplo n.º 1
0
 /**
  * Get BuilderDefinition from entity property
  *
  * @param string $propertyName
  * @param bool $fillValues
  * @return BuilderDefinition|null
  * @throws InvalidStateException
  */
 private function getPropertyRule($propertyName, $fillValues = TRUE)
 {
     $property = $this->entityReflection->getProperty($propertyName);
     $annotations = $this->annotationReader->getPropertyAnnotations($property);
     $rule = new BuilderDefinition($propertyName);
     foreach ($annotations as $annotation) {
         switch (get_class($annotation)) {
             case 'Doctrine\\ORM\\Mapping\\Column':
                 if ($this->getEntityPrimaryKeyName($this->entity) === $propertyName) {
                     $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_HIDDEN);
                     $rule->setRequired(FALSE);
                 } else {
                     $type = BuilderDefinition::COMPONENT_TYPE_TEXT;
                     $rule->setRequired(!$annotation->nullable);
                     /** @var Column $annotation */
                     if ($annotation->type === 'boolean') {
                         $type = BuilderDefinition::COMPONENT_TYPE_CHECKBOX;
                     }
                     // is numeric?
                     if ($annotation->type === 'integer' || $annotation->type === 'float' || $annotation->type === 'bigint' || $annotation->type === 'decimal' || $annotation->type === 'smallint') {
                         $rule->addValidationRule(Form::NUMERIC, 'This is required in numeric format', TRUE);
                     }
                     $rule->setComponentType($type);
                 }
                 break;
             case 'Doctrine\\ORM\\Mapping\\ManyToOne':
                 /** @var ManyToOne $annotation */
                 $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_SELECT);
                 if ($fillValues) {
                     $rule->setValues($this->getPossibleValues($annotation->targetEntity));
                 }
                 $rule->setTargetEntity($annotation->targetEntity);
                 $rule->setRequired(TRUE);
                 break;
             case 'Doctrine\\ORM\\Mapping\\ManyToMany':
                 /** @var OneToMany $annotation */
                 $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_MULTI_SELECT);
                 if ($fillValues) {
                     $rule->setValues($this->getPossibleValues($annotation->targetEntity));
                 }
                 $rule->setRequired(TRUE);
                 $rule->setTargetEntity($annotation->targetEntity);
                 break;
             case 'Doctrine\\ORM\\Mapping\\JoinColumn':
                 /** @var JoinColumn $annotation */
                 $rule->setRequired(!$annotation->nullable);
                 break;
         }
     }
     return $rule->getComponentType() === NULL ? NULL : $rule;
 }
Exemplo n.º 2
0
 /**
  * @param $propertyName
  * @param bool|true $fillValues
  * @return BuilderDefinition|null
  * @throws InvalidStateException
  * @throws \Doctrine\ORM\Mapping\MappingException
  */
 private function getPropertyRule($propertyName, $fillValues = TRUE)
 {
     $rule = new BuilderDefinition($propertyName);
     if ($this->entityMetadata->hasField($propertyName)) {
         // Column
         if ($this->getEntityPrimaryKeyName($this->entity) === $propertyName) {
             $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_HIDDEN);
             $rule->setRequired(FALSE);
         } else {
             $fieldMapping = $this->entityMetadata->getFieldMapping($propertyName);
             $type = BuilderDefinition::COMPONENT_TYPE_TEXT;
             $rule->setRequired(!$fieldMapping['nullable']);
             /** @var Column $annotation */
             if ($fieldMapping['type'] === 'boolean') {
                 $type = BuilderDefinition::COMPONENT_TYPE_CHECKBOX;
             }
             // is numeric?
             if ($fieldMapping['type'] === 'integer' || $fieldMapping['type'] === 'float' || $fieldMapping['type'] === 'bigint' || $fieldMapping['type'] === 'decimal' || $fieldMapping['type'] === 'smallint') {
                 $rule->addValidationRule(Form::NUMERIC, 'This is required in numeric format', TRUE);
             }
             $rule->setComponentType($type);
         }
     } else {
         if ($this->entityMetadata->hasAssociation($propertyName)) {
             $associationMapping = $this->entityMetadata->getAssociationMapping($propertyName);
             switch ($associationMapping['type']) {
                 case ClassMetadata::MANY_TO_ONE:
                     $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_SELECT);
                     if ($fillValues) {
                         $rule->setValues($this->getPossibleValues($associationMapping['targetEntity']));
                     }
                     $rule->setTargetEntity($associationMapping['targetEntity']);
                     $rule->setRequired(TRUE);
                     break;
                 case ClassMetadata::MANY_TO_MANY:
                     $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_MULTI_SELECT);
                     if ($fillValues) {
                         $rule->setValues($this->getPossibleValues($associationMapping['targetEntity']));
                     }
                     $rule->setRequired(TRUE);
                     $rule->setTargetEntity($associationMapping['targetEntity']);
                     break;
             }
         }
     }
     return $rule->getComponentType() === NULL ? NULL : $rule;
 }