Php 如何在symfony自动生成的表单(链接到关系)中的choice小部件中设置一组结果

Php 如何在symfony自动生成的表单(链接到关系)中的choice小部件中设置一组结果,php,forms,symfony,entities,Php,Forms,Symfony,Entities,我想知道使用下面的代码,如何在生成的表单中显示一组联系人,链接到本说明的公司,而不是DB中的所有联系人 实体说明: /** * @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\NoteType") * @ORM\JoinColumn(nullable=false) */ private $noteType; /** * @ORM\ManyToOne(targetEntity="Ma

我想知道使用下面的代码,如何在生成的表单中显示一组联系人,链接到本说明的公司,而不是DB中的所有联系人

实体说明:

 /**
     * @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\NoteType")
     * @ORM\JoinColumn(nullable=false)
     */
    private $noteType;

    /**
     * @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Contact", inversedBy="contacts")
     * @ORM\JoinColumn(nullable=true)
     */
    private $contact;

    /**
     * @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Company")
     * @ORM\JoinColumn(nullable=false)
     */
    private $company;

    /**
     * @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\User", inversedBy="users")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;
实体公司:

/**
 * @ORM\OneToMany(targetEntity="Main\MainBundle\Entity\Contact", mappedBy="company", cascade={"remove"})
 * @ORM\JoinColumn(nullable=true)
 */
private $contacts;

如果需要在表单字段中获取特定的实体集,可以使用

在您的情况下(在表单类型类中),它可能类似于:

$builder->add('contacts', 'entity', array(
    'class' => 'MainMainBundle:Contact',
    'query_builder' => function (EntityRepository $er) use ($company) {
        return $er->createQueryBuilder('c')
            ->where('c.company = :company')
            ->setParameter('company', $company);
    },
));

注意传递
$company
变量。

如果您不喜欢使用QueryBuilder,可以在控制器中设置联系人:

$oForm = $this->createForm(new CompanyForm($contacts));
在表格中,您可以这样做:

public function __construct($contacts))
{
    $this->vContacts = $contacts;
}
然后:


我将使用Besbes的答案,我认为将请求与表单分开比较简单,但我会记住您的答案,以防需要!妈的,太简单了,我以前应该试试这样的!请注意,要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引自以为是的答案和垃圾邮件。也就是说,我不想像许多人一样,要求提供一段代码。我所需要的只是好的信息,以便找到我的答案。我终于找到了答案。。。发送给如此多的人。该死,堆栈溢出在我看来是一种非常错误的方式,它和编码一样有用!
->add('contacts', 'choice', array(
            'required' => true,
            'label' => 'contacts',
            'choices' => $this->vContacts,
           )
        )