【问题标题】:Symfony2 FOSUserBundle: accessing DB inside profile build formSymfony2 FOSUserBundle:在配置文件构建表单中访问数据库
【发布时间】:2015-03-16 10:54:10
【问题描述】:

我在 Symfony2 上使用 FOSUserBundle。

我已扩展配置文件表单类型以包含我的字段。

我想使用在 DB(而不是在用户实体中)找到的一个值预先填充其中一个字段。

基本上我需要从 buildForm 内部访问 DB。

我不想(如果可能的话)覆盖原来的控制器。

编辑:我可能无法使用“实体”字段类型,因为(据我所知)创建了选择的等价物(从数据库加载值)。我需要使该字段可编辑。我需要访问当前用户实体,以便访问其 ID。使用该 ID,我可以执行查询并从我的数据库中获取文本值(它是与用户关联的许可证),并使用该值来填充表单的文本字段之一。我可以覆盖用户类的 getLicense() 方法来在那里执行我的查询吗?如何访问实体内的数据库?

提示?

谢谢!

【问题讨论】:

    标签: symfony fosuserbundle


    【解决方案1】:

    您需要实体字段:

    http://symfony.com/doc/current/reference/forms/types/entity.html

    这是一个例子:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {        
        $builder->add('foobar', 'entity', array(
                    'class' => 'DummyBundle:Test',
                    'property' => 'name',
                    'multiple' => false,
                    'expanded' => false,
                    'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
                                           return $er->createQueryBuilder('i')
                                           ->orderBy('i.name', 'ASC');
                    }
            ));
    }
    

    【讨论】:

    • 不知道它是否符合我的需求?实际上,该字段必须是可编辑的,而不是一个选择。我真的需要它是一个文本。我需要:获取构建表单中当前用户的 ID,使用该 ID 执行查询,获取文本值,使用该文本值预填充文本字段。
    • 另一种解决方案可能是访问用户实体内的数据库,以便我可以实现 getLicense() 方法来执行数据库搜索并返回适当的值。但是我又不知道该怎么做:/
    • 您是否阅读过有关实体字段的文档?我建议您也更新您的原始问题以反映您的意愿。
    • 是的,我已阅读文档,据我了解,Entity 字段是一个选择字段,这不是我需要的。
    • 你是对的..我认为,如果你想混合编辑和保存你的实体,你最好构建一个自定义解决方案并完全跳过基于实体的表单构建器。
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2013-10-14
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多