在独立的符号表单组件的情况下,使用实体字段类型字段时出现问题


Trouble with using entity Field Type field with choice in case of standalone symfony-form component

我使用symfony-form组件作为独立组件。

这是作曲家.json :

    "symfony/form": "2.7.*",
    "symfony/validator": "2.7.*",
    "symfony/config": "2.7.*",
    "symfony/templating": "2.8.*@dev",
    "symfony/twig-bridge": "3.0.*@dev",
    "symfony/framework-bundle": "2.7.0-BETA1",
    "symfony/doctrine-bridge":"2.7.1"

我想创建具有实体类型的选择表单元素。但是怎么做呢?当我设置字符串参数时,它说"无法加载类型"实体"。

 $builder
        ->add('groups', 'entity', array(
        'class' => 'Application'Groups'Entity'Group',
        'choices' => $this->group->getUsers()
    ));

如何在表单中加载实体类型?这是我的表单初始化:

  /**
 * @return Component'Form'FormFactoryInterface
 */
public function getFormFactory()
{
    if(!$this->formFactory){
        $this->formFactory = Component'Form'Forms::createFormFactoryBuilder()
            ->addExtension(new Extension'HttpFoundation'HttpFoundationExtension())
            ->addExtension(new Extension'Templating'TemplatingExtension($this->engine->getEngine(), null, array(
                $VENDOR_FRAMEWORK_BUNDLE_DIR . '/Resources/views/Form',
                PATH_APPLICATION.'/layouts/form_widgets'
            )))
            //->addExtension(new CsrfExtension($this->initCSRF()))
            ->addExtension(new Extension'Validator'ValidatorExtension($this->initValidator()))
            ->getFormFactory();
    }
    return $this->formFactory;
}

也许我应该设置对象新的Symfony''Bridge''Doctrine''Form''Type''EntityType()。但它需要经理注册表,而我没有。我真的不需要 ManagerRegistry,因为我只有一个 EntityManager 自己管理我的所有实体。也许我应该制作一些实现 ManagerRegistry 接口的假对象包装器并将其注入到新的 EntityType()

请帮我解决这个巨大的麻烦。

有点晚了,但这里有一个非常丑陋的入门方法:

假管理器注册表初始化:

$doctrineManagerRegistry = new TestManagerRegistry(
            'ORM',
            array('default_connection'),
            array('default_manager'),
            'default',
            'default',
            'Doctrine'Common'Persistence'ObjectManagerAware'
        );

这转到formFactory:

->addExtension(new DoctrineOrmExtension($doctrineManagerRegistry))

还有假的经理注册表:

class TestManagerRegistry extends 'Doctrine'Common'Persistence'AbstractManagerRegistry
{
    protected function getService($name)
    {
        return App::$em; //your entity manager
    }
    protected function resetService($name)
    {
    }
    public function getAliasNamespace($alias)
    {
        return __NAMESPACE__;
    }
}

这些代码不是用于生产,只是用于想法,它们主要来自:vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/ManagerRegistryTest.php

如果我想出一个好方法,我会更新这个答案。