如何保存数据从我创建的表单,这是使用2个实体输出不同的选择和输入字段,到第一个实体的表。
主实体是任务。php -在这种形式下,我也得到数据从其他2个实体称为TaskTypes和用户。
它看起来像这样:
$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;
}
我得到了这些代码片段的例子如何使表单与多个实体。但我没有得到它的工作,以保存数据从"外部实体"在表中的"主要实体"
What I tried:
...
/**
* @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()"、"setTaskTypes()"、"taskTypes()"、"__set()"或"__call()"都不存在,并且在类"Seotool'MainBundle'Entity'Tasks"中都没有公共访问权限。500内部服务器错误- NoSuchPropertyException
属性名称与getter和setter方法之间存在差异。重新生成getter和setter,以确保它们能够正确匹配。
目前,您将无法在数据库中的task_type
字段中添加空值。要改变这种情况,可以在注释中声明:
@ORM'Column(type="integer", nullable=true)
然后更新数据库模式