如何从我创建的表单中保存数据,该表单使用2个实体将不同的选择和输入字段输出到第一个实体的表中。
主要实体是Tasks.php - 在这种形式中,我还获得了来自2个其他实体的数据,称为TaskTypes和User。
看起来像这样:
$AddTask = new Tasks();
$form = $this->createFormBuilder($AddTask)
->add('task_title', 'text', array('label' => 'Aufgabentitel', 'attr' => array('class' => 'first')))
->add('task_description', 'textarea', array('label' => 'Aufgabenbeschreibung'))
->add('task_types', 'entity', array(
'class' => 'SeotoolMainBundle:TaskTypes',
'property' => 'task_type_title',
'label' => 'Aufgabentyp'))
->add('user', 'entity', array(
'class' => 'SeotoolMainBundle:User',
'property' => 'username',
'label' => 'Kundenzuordnung',
'query_builder' => function(EntityRepository $er ) use ( $request ) {
return $er->createQueryBuilder('w')
->orderBy('w.username', 'ASC')
->where('w.isAdmin = 0')
->andWhere('w.isActive = 1');
}
))
->add('Aufgabe anlegen', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$task = new Tasks();
$task->setTaskTitle($request->request->get('form')['task_title']);
$task->setTaskDescription($request->request->get('form')['task_description']);
$em = $this->getDoctrine()->getManager();
$em->persist($task);
$em->flush();
return $this->redirect($this->generateUrl('add_task'));
}
My Entity / Tasks.php如下所示:
...
/**
* @Assert\Type(type="Seotool\MainBundle\Entity\TaskTypes")
*/
protected $tasktypes;
/**
* @Assert\Type(type="Seotool\MainBundle\Entity\User")
*/
protected $user;
...
public function getTaskTypes()
{
return $this->tasktypes;
}
public function setTaskTypes(TaskTypes $tasktypes = null)
{
$this->tasktypes = $tasktypes;
}
public function getUser()
{
return $this->user;
}
public function setUser(User $user = null)
{
$this->user = $user;
}
我从一个示例中获得了这些代码片段,了解如何使用多个实体制作表单。但我不能让它保存来自" extern实体的数据"在"主要实体"
的表格中我尝试了什么:
...
/**
* @Assert\Type(type="Seotool\MainBundle\Entity\TaskTypes")
* @ORM\Column(type="integer")
*/
protected $tasktypes;
/**
* @Assert\Type(type="Seotool\MainBundle\Entity\User")
* @ORM\Column(type="string")
*/
protected $user;
....
public function getTaskTypes()
{
return $this->tasktypes;
}
public function setTaskTypes()
{
return $this->tasktypes;
}
public function getUser()
{
return $this->user;
}
public function setUser(User $user = null)
{
$this->user = $user;
}
输出以下错误:
属性" task_types"也没有其中一种方法" addTaskTyp()" /" removeTaskTyp()"," addTaskType()" /" removeTaskType()&# 34;," setTaskTypes()"," taskTypes()"," __ set()"或" __ call()"在课堂上存在且具有公共访问权限" Seotool \ MainBundle \ Entity \ Tasks"。 500内部服务器错误 - NoSuchPropertyException
答案 0 :(得分:1)
您的媒体资源名称与getter和setter方法之间存在差异。重新生成getter和setter以确保它们匹配正确。
就目前而言,您将无法在数据库的task_type
字段中添加空值。要更改此设置,您可以在注释中声明它:
@ORM\Column(type="integer", nullable=true)
然后更新数据库架构。