/** * @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; }
private function getUniqueAndRequiredFields(ClassMetadata $meta, $entity) { $fields = array(); foreach ($meta->getFieldNames() as $fieldName) { $mapping = $meta->getFieldMapping($fieldName); if (!empty($mapping['id']) && $meta->usesIdGenerator()) { // autogenerated id continue; } if (!empty($mapping['nullable']) && empty($mapping['unique'])) { // is nullable and is not unique continue; } $fields[$fieldName]['value'] = $meta->getFieldValue($entity, $fieldName); $fields[$fieldName]['quotedColumn'] = $this->quotes->getColumnName($fieldName, $meta, $this->platform); $fields[$fieldName]['type'] = Type::getType($mapping['type']); } return $fields; }