/** * 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; }
/** * @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; }