Php 如果是独立的symfony表单组件,使用实体字段类型字段时会出现问题

Php 如果是独立的symfony表单组件,使用实体字段类型字段时会出现问题,php,doctrine,symfony-forms,Php,Doctrine,Symfony Forms,我使用symfony表单组件作为独立组件 下面是composer.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

我使用symfony表单组件作为独立组件

下面是composer.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"
我想创建实体类型为的choice表单元素。但是怎么做呢?当我设置字符串参数时,它表示“无法加载类型”实体

如何在表单中加载entityType? 以下是我的表单初始化:

  /**
 * @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;
}
也许我应该设置对象new Symfony\Bridge\doctor\Form\Type\EntityType()。但它需要ManagerRegistry,而我没有。我真的不需要ManagerRegistry,因为我只有一个EntityManager,可以自己管理我的所有实体。或许我应该制作一些伪对象包装器,实现ManagerRegistry接口,并将其注入新的EntityType()


请帮我解决这个大麻烦。

有点晚了,但这里有一个非常丑陋的方法让你开始:

假ManagerRegistry初始化:

$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

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

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__;
    }
}