Symfony2来自第一实体表中第二实体的安全数据

时间:2014-07-09 18:45:11

标签: php forms entity-framework symfony

如何从我创建的表单中保存数据,该表单使用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

1 个答案:

答案 0 :(得分:1)

您的媒体资源名称与getter和setter方法之间存在差异。重新生成getter和setter以确保它们匹配正确。

就目前而言,您将无法在数据库的task_type字段中添加空值。要更改此设置,您可以在注释中声明它:

@ORM\Column(type="integer", nullable=true) 

然后更新数据库架构。