Php 如果是独立的symfony表单组件,使用实体字段类型字段时会出现问题
我使用symfony表单组件作为独立组件 下面是composer.json: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/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__;
}
}