Example #1
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;
 }