【问题标题】:Symfony2 Form handleRequest fails to bind the POST data of a foreign field to the entitySymfony2 Form handleRequest 无法将外部字段的 POST 数据绑定到实体
【发布时间】:2016-04-15 08:08:40
【问题描述】:

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

每个故事都与一个项目相关。

-----------     --------------
| project |     | story      |
-----------     --------------
| id      |     | id         |
| name    |     | project_id |
-----------     | name       |
                --------------

ProjectStory 之间的关系使用以下代码定义。

Entity/Project.php

class Project {
     ...

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

Entity/Story.php

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 转换器。

http://symfony.com/doc/current/cookbook/form/data_transformers.html#about-model-and-view-transformers

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

然而,在提交时,Project 字段总是会收到 This value should not be blank. 验证错误,即使它不为空。我做对了吗?我什至无法再访问$story->getProject(),因为它在提交后被设置为null

【问题讨论】:

  • 您可能还想包含您的 CreateStoryType 和 DataTransformer。
  • @jbafford,你知道吗,谢谢你询问我的 DataTransformer 代码。当我注意到我的 reverseTransform 方法根本没有返回实体时,我正要发布它。因为这个,该死的几天一直在拉我的头发。

标签: forms symfony doctrine-orm entity-relationship


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多