php – 如何在Symfony 2中的Form(Type)类中获取实体存储库的实例?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何在Symfony 2中的Form(Type)类中获取实体存储库的实例?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有普通的*类型:
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

您可以将实体字段类型指定为选项,如下所示:
$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'];

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何在Symfony 2中的Form(Type)类中获取实体存储库的实例?全部内容,希望文章能够帮你解决php – 如何在Symfony 2中的Form(Type)类中获取实体存储库的实例?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。