/** * {@inheritDoc} */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setRequired(['attribute_type']); $resolver->setDefaults(['empty_value' => 'orob2b.attribute.attribute_type_constraint.none']); $resolver->setNormalizers(['choices' => function (Options $options, $value) { if (!empty($value)) { return $value; } $choices = []; if ($options['attribute_type'] instanceof AttributeTypeInterface) { $constraints = $options['attribute_type']->getOptionalConstraints(); } elseif (is_string($options['attribute_type'])) { $attributeType = $this->attributeTypeRegistry->getTypeByName($options['attribute_type']); if (!$attributeType) { throw new \LogicException(sprintf('Attribute type name "%s" is not exist in attribute type registry.', $options['attribute_type'])); } $constraints = $attributeType->getOptionalConstraints(); } else { throw new UnexpectedTypeException($options['attribute_type'], 'OroB2B\\Bundle\\AttributeBundle\\AttributeType\\AttributeTypeInterface or string'); } foreach ($constraints as $choice) { $choices[$choice->getAlias()] = 'orob2b.validation.constraint.alias.' . $choice->getAlias(); } return $choices; }]); }
/** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $attribute = $options['data']; if (!$attribute instanceof Attribute) { throw new UnexpectedTypeException($attribute, 'Attribute'); } $attributeType = $this->typeRegistry->getTypeByName($attribute->getType()); if (!$attributeType) { throw new LogicException(sprintf('Attribute type "%s" not found', $attribute->getType())); } $this->addMainFields($builder); $this->addValidationFields($builder, $attributeType); if ($attributeType instanceof OptionAttributeTypeInterface) { $this->addDefaultOptionsField($builder, $attribute, $attributeType); } else { $this->addDefaultValueField($builder, $attribute, $attributeType); } $this->addPropertyFields($builder, $attributeType); $builder->addViewTransformer(new AttributeTransformer($this->managerRegistry, $this->typeRegistry, $attribute)); $this->addDisabledFields($builder); $builder->addViewTransformer(new AttributeDisabledFieldsTransformer()); }
public function testGetTypeByNameResult() { $this->assertEquals($this->attributeTypeMock, $this->registry->getTypeByName(self::ATTRIBUTE_TYPE_NAME)); }