Forms Symfony2 Form HandlerRequest无法将外部字段的POST数据绑定到实体

Forms Symfony2 Form HandlerRequest无法将外部字段的POST数据绑定到实体,forms,symfony,doctrine-orm,entity-relationship,Forms,Symfony,Doctrine Orm,Entity Relationship,首先,这是我的数据库设计 每个故事都与单个项目相关 ----------- -------------- | project | | story | ----------- -------------- | id | | id | | name | | project_id | ----------- | name | -------------- 项目和故事之

首先,这是我的数据库设计

每个故事都与单个项目相关

-----------     --------------
| project |     | story      |
-----------     --------------
| id      |     | id         |
| name    |     | project_id |
-----------     | name       |
                --------------
项目故事之间的关系使用以下代码定义

Entity/Project.php

class Project {
     ...

    /**
     * @ORM\OneToMany(targetEntity="Story", mappedBy="project")
     */
    private $stories;
    ...
}
class Story {
    ...
    private $title;

    /**
     * @ORM\ManyToOne(targetEntity="Project", inversedBy="stories")
     * @ORM\JoinColumn(name="project_id", referencedColumnName="id", nullable=FALSE)
     */
    private $project;
    ...
}
Entity/Story.php

class Project {
     ...

    /**
     * @ORM\OneToMany(targetEntity="Story", mappedBy="project")
     */
    private $stories;
    ...
}
class Story {
    ...
    private $title;

    /**
     * @ORM\ManyToOne(targetEntity="Project", inversedBy="stories")
     * @ORM\JoinColumn(name="project_id", referencedColumnName="id", nullable=FALSE)
     */
    private $project;
    ...
}
我的控制器如下所示:

/**
 * @Route("/story/create/project/{id}", name="storyCreate")
 */
public function createAction($id, Request $request) {

    /* Get project by id */
    $project = $this->getDoctrine()
        ->getRepository('AppBundle:Project')
        ->find($id);

    /* Create new story instance and set project */
    $story = new Story();
    $story->setProject($project);

    /* Generate the form and handle the request */
    $form = $this->createForm(CreateStoryType::class, $story);
    $form->handleRequest($request);

    /* Form is submitted and valid */
    if($form->isSubmitted() && $form->isValid()) {
        /* Create the objects */
        $em = $this->getDoctrine()->getManager();
        $em->persist($story);
        $em->flush();
    }

    $this->context['form'] = $form->createView();

    return $this->render('project/create.html.twig', $this->context);
}
我还按照这个指南创建了一个项目,以ID transformer

现在在页面的初始加载时,一切看起来都很完美。 我看到一个表单,其中包含
项目
标题
输入文本框,其中
项目
字段预先填充了URL中指示的当前项目


但是,在提交时,
项目
字段始终获得
此值不应为空。
验证错误,即使它不是空的。我做得对吗?我甚至无法再访问
$story->getProject()
,因为在提交后它被设置为
null

好,因为@jbforet的评论,我发现了问题


我的数据转换器没有在
reverseTransform
方法中返回实体。

您可能还希望包含您的
CreateStoryType
和DataTransformer。@jb知道吗,谢谢您询问我的DataTransformer代码。我正要发布它,这时我注意到我的
reverseTransform
方法根本没有返回实体。他妈的因为这件事已经拉我的头发好几天了。