假设我有普通的*类型:
class LocationType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilder $builder,array $options) { $builder ->add(...) ... } }
其中一个字段是选择类型.应该从数据库(从某个特定的实体存储库)检索需要用作选择项的值.
所以问题是:如何在LocationType类中获取存储库?是通过构造函数传递它的唯一方法吗?
UPD:
我知道实体类型,但遗憾的是我不能使用它,因为我的属性不是也不能被定义为一对一的关系,因为Doctrine不支持的非常复杂的关系条件(还是?).有关其他详细信息,请参见How to specify several join conditions for 1:1 relationship in Doctrine 2
您可以将实体字段类型指定为选项,如下所示:
原文链接:https://www.f2er.com/php/130250.html$builder ->add('foo','entity',array( 'class' => 'FooBarBundle:Foo','query_builder' => function(\Doctrine\ORM\EntityRepository $er) { return $er->createQueryBuilder('q')->orderBy('q.name','ASC'); },));
编辑:
实际上’class’选项是唯一必需的字段选项.您可以在此处阅读有关实体字段类型的更多信息:http://symfony.com/doc/2.0/reference/forms/types/entity.html
希望这可以帮助.
编辑:
下面进一步讨论,这是一个例子
在控制器中:
$entity = new Foo(); $type = new FooType(); $er = $this->getDoctrine() ->getEntityManager() ->getRepository('FooBarBundle:Foo'); $form = $this->createForm($type,$entity,array( 'foo_repository' => $er ));
$options数组被传递给FooType :: buildForm()方法,因此foo_repository应该在这个方法中可用,如下所示:
$er = $options['foo_repository'];