我是Symfony 2的新手,我试图为一个有外键的内容类型构建一个表单。我不知道如何使用表单保存外键。
我的两个表是“Category”和“Question”。一个问题属于一个类别(多对一)。所以我在Entity中的php文件包含:
<?php
namespace Iel\CategorieBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Question
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Iel\CategorieBundle\Entity\QuestionRepository")
*/
class Question
{
/**
* @ORM\ManyToOne(targetEntity="Iel\CategorieBundle\Entity\Categorie")
* @ORM\JoinColumn(nullable=false)
*/
private $categorie;
/**
* Set categorie
*
@param Iel\CategorieBundle\Entity\Categorie $categorie
*/
public function setCategorie(\Iel\CategorieBundle\Entity\Categorie $categorie)
{
$this->categorie = $categorie;
}
/**
* Get categorie
*
@return Iel\CategorieBundle\Entity\Categorie
*/
public function getCategorie()
{
return $this->categorie;
}
我试着像这样构建控制器函数,但它不是一个正确的语法:
public function addquestionAction()
{
$question = new Question;
$form = $this->createFormBuilder($question)
->add('titre', 'text')
->add('auteur', 'text')
->add('contenu', 'textarea')
->add('category_id', $this->getCategorie())
->getForm();
$request = $this->get('request');
我不知道如何使用此表单在Question的表中写入当前category_id。
3条答案
按热度按时间irlmq6kh1#
更好的方法是声明类型为“实体”的“类别”。类似这样:
这将创建一个select,其中选项值是类别id,选项显示值是类别名称。持久化$question对象将在“questions”表的外键字段中插入类别id。
nwwlzxa72#
尝试使用
categorie
而不是category_id
。Doctrine和SF2 Forms使用关联,而不是外键。另外,
$this->getCategorie()
也不起作用。你在控制器上下文中。而不是让表单根据Question
Map文件猜测类型。euoag5mw3#
我使用symfony 6.2,现在我们可以使用
EntityType
,这里是一个例子:不要忘记
choice_label
,否则你可能会出现类似“Object of class X could not be converted to string.”的错误。