带嵌入表单的Symfony2参数

时间:2014-06-03 14:47:32

标签: php symfony doctrine-orm

编辑:我发现真正的问题! 我试图给控制器的子表格提供一个参数。 如果没有此参数,表单将完美运行。

我想在选择列表中仅显示关系中尚未存在的用户。 我有这个query_builder:

'query_builder' => function(UserRepository $er) use($options) {
                                    return $er->getFormateursAvailable($options['categ']);
                               },

方法:

public function setDefaultOptions(OptionsResolverInterface  $resolver)
{
    $resolver->setDefaults(array('data_class' => 'Intranet\FormationBundle\Entity\CategorieFormateur', 'categ' => false));
    //$resolver->setDefaults(array('data_class' => 'Intranet\FormationBundle\Entity\CategorieFormateur'));
}

对于收集表格,我必须将此选项放在以下表格中:

'options' => $options,

但我不知道是否属实,我必须定义方法:

public function setDefaultOptions(OptionsResolverInterface  $resolver)
{
    $resolver->setDefaults(array('categ' => false));
}

(如果没有参数,表单在没有此方法的情况下工作。) 并致电:

$form = $this->createForm(new GererFormateurCategorieType(), $categorie, array('categ' => $categorie));

然后,我有这个错误:

  

属性“user”和方法“getUser()”,“isUser()”,“hasUser()”,“__ get()”之一都不存在,并且在类“Intranet \ FormationBundle \ Entity”中具有公共访问权限\ Categorie”。

关系:

分类具有以下属性:

/**
* @ORM\OneToMany(targetEntity="Intranet\FormationBundle\Entity\CategorieFormateur", mappedBy="categorie", cascade={"persist", "remove"}, orphanRemoval=true)
**/
private $formateurs;

使用addFormateur,removeFormateur和getFormateurs

CategorieFormateur:

    /**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Intranet\FormationBundle\Entity\Categorie", inversedBy="formateurs")
* @ORM\JoinColumn(name="categorie_id", referencedColumnName="id")
*/
private $categorie;

/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Intranet\UserBundle\Entity\User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;

每个属性的setter和getter

2 个答案:

答案 0 :(得分:0)

根据错误消息,您必须在setFormateurs()实体中添加Categorie方法:

public function setFormateurs($formateurs)
{
    $this->formateurs = $formateurs;

    return $this;
}

答案 1 :(得分:0)

我找到了另一种方法,这不是真正的答案:

在存储库中,我使用 $ request = Request :: createFromGlobals();

我爆炸$ requestPathInfo()来获取最后一个参数,我在查询中使用它...

但是关系中的现有用户没有加载,尽管他们没有在列表中出现。

我希望有人知道如何正确地做到这一点!