我使用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' => 'ApplicationGroupsEntityGroup',
'choices' => $this->group->getUsers()
));
如何在表单中加载实体类型?这是我的表单初始化:
/**
* @return ComponentFormFormFactoryInterface
*/
public function getFormFactory()
{
if(!$this->formFactory){
$this->formFactory = ComponentFormForms::createFormFactoryBuilder()
->addExtension(new ExtensionHttpFoundationHttpFoundationExtension())
->addExtension(new ExtensionTemplatingTemplatingExtension($this->engine->getEngine(), null, array(
$VENDOR_FRAMEWORK_BUNDLE_DIR . '/Resources/views/Form',
PATH_APPLICATION.'/layouts/form_widgets'
)))
//->addExtension(new CsrfExtension($this->initCSRF()))
->addExtension(new ExtensionValidatorValidatorExtension($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',
'DoctrineCommonPersistenceObjectManagerAware'
);
这转到formFactory:
->addExtension(new DoctrineOrmExtension($doctrineManagerRegistry))
还有假的经理注册表:
class TestManagerRegistry extends DoctrineCommonPersistenceAbstractManagerRegistry
{
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
如果我想出一个好方法,我会更新这个答案。