public function buildView(FormView $view, FormInterface $form, array $options) { $items = array(); if (count($options['items'])) { foreach ($options['items'] as $item) { $definition = $this->resolver->getDefinition($item); $items[] = array('type' => $definition->getName(), 'label' => $definition->getLabel(), 'translationDomain' => $definition->getTranslationDomain()); } } else { foreach ($this->resolver->getItems() as $item) { $items[] = array('type' => $item->getName(), 'label' => $item->getLabel(), 'translationDomain' => $item->getTranslationDomain()); } } $view->vars['items'] = $items; }
/** * Extend item type if model class differs from parent class * * @param LoadClassMetadataEventArgs $eventArgs */ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) { /** @var ClassMetadata $metadata */ $metadata = $eventArgs->getClassMetadata(); try { $type = $this->resolver->getTypeByParent($metadata->getName()); $definition = $this->resolver->getDefinition($type); if ($definition->getParent() !== null && $definition->getModel() !== $definition->getParent()) { $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); $metadata->setDiscriminatorColumn(['name' => 'discr', 'type' => 'string', 'length' => 6]); $metadata->addDiscriminatorMapClass('target', $definition->getParent()); $metadata->addDiscriminatorMapClass('extend', $definition->getModel()); } } catch (NoTypeFoundException $e) { // no match type, so nothing to do here } }