Symfony2 容器感知表单类型

标签 symfony doctrine

有没有办法让表单类型容器知道?

例如,我有 3 个实体帐户、用户和事件。用户具有多对多关系,以便将许多用户与许多其他用户(称为批准者)相关联,这样做的原因是用户创建的事件可以具有能够批准它的用户列表。在我有一个批准者多项选择字段的用户编辑表单中,列表需要按帐户过滤,因此我需要我的表单类型是容器感知的,以便按帐户 ID 过滤可用用户列表。

我认为让表单类型容器知道是正确的方法吗?我想使用实体管理器按帐户过滤用户列表。

最佳答案

1 通过构造函数注入(inject)实体管理器

<?php

namespace Acme\YourBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityManager;

class YourType extends AbstractType
{

    /**
     * The entity manager
     *
     * @var EntityManager
     */
    private $entityManager;

    /**
     * @param EntityManager
     */
    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
       //build your form here



    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\YourBundle\Entity\YourEntity',
        ));
    }

    public function getName()
    {
        return 'name_of_your_form';
    }

}

2 将其声明为服务
services:
    # Form type
    acme_your_bundle.name_of_your_form.form.type:
        class: Acme\YourBundle\Form\Type\YourType
        arguments:
            entityManager: "@doctrine.orm.entity_manager"

笔记:

如果您从 Symfony 开始,请接受以下建议:

仔细查看 FOSMessageBundle 的代码,它将为您提供在 symfony 中做任何事情所需的一切,从表单模型到表单工厂,再到创建特殊服务(如 Composer 、授权者等)。你学习这个包越多,你学习 symfony 的速度就越快,我向你保证 100%。最后,在您的具体情况下,查看 FormFactory in this bundle

关于Symfony2 容器感知表单类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047431/

相关文章:

php - symfony2 : how to use translator in console command

php - Doctrine 单表继承保留 findAll

forms - 如何选择 'choices' findall后表单的显示字段?

php - 交响乐 2 : Upload file and save as blob

php - 将 MacOS 更新到 Mojave (10.14) 后,PECL 扩展安装失败

交响乐2 : How do I check if a user is not logged in inside a template?

sql-server - Doctrine 列名称区分大小写

symfony - 如何查询在 odm Doctrine 中嵌入特定项目的所有项目

mysql - Symfony - 如何将初始数据加载到数据库

Symfony 2.1 设置语言环境