0

我正在处理 Symfony 2.8 应用程序中的表单。

我有一个实体对象,该实体可以有一个或多个子对象。这些子对象由属性id 标识,但也由属性标识。

默认情况下,来自id属性的值用于 HTML (subObject.__toString())。我想.

我似乎无法找到如何做到这一点......

PS:我不能使用 SubObject 的 __toString() 方法,因为它已经用于其他目的......

想法将不胜感激。

<?php

namespace My\Bundle\ObjectBundle\Form\Type\Object;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

class ObjectType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('code', TextType::class, [
                'required' => true,
            ])
            ->add('subObjects', EntityType::class, [
                'class'    => 'My\Bundle\ObjectBundle\Entity\SubObject',
                'multiple' => true,
            ])
    }
}
4

1 回答 1

1

我快速收集了一个伪代码,说明我将如何在侦听器中执行此操作,希望我能理解您所追求的。无论如何,这是一种通用方法。

class ResolveSubObjectSubscriber implements EventSubscriberInterface {

    /** @var  EntityManager */
    private $entityManager;

    public function __construct(FormFactoryInterface $factory, EntityManager $entityManager) {

        $this->factory = $factory;
        $this->entityManager = $entityManager;
    }

    public static function getSubscribedEvents() {
        return array(FormEvents::POST_SET_DATA => 'resolveSubObject');
    }

    /**
     *  Resolve sub objects based on key
     *
     * @param FormEvent $event
     */
    public function resolveSubObject(FormEvent $event) {

        $data = $event->getData();
        $form = $event->getForm();

        // don't care if it's not a sub object
        if (!$data instanceof SubObject) {
            return;
        }

        /** @var SubObject $subObject */
        $subObject = $data;

        // here you do whatever you need to do to populate the object into the sub object based on key

        $subObjectByKey = $this->entityManager->getRepository('SomeRepository')->findMySubObject($subObject->getKey());
        $subObject->setObject($subObjectByKey);
   }
}
于 2016-06-14T00:01:45.557 回答