尝试持久化实体后出现Symfony2错误:无法找到实体

时间:2014-08-20 12:16:11

标签: symfony doctrine-orm

我有两个实体,系列和杂志,具有ManyToMany关系。 当我尝试添加一个新的Serie时,我使用两个路由(new和create),在SerieController中使用以下代码:

public function newAction($id = null)
    {
        $entity = new Serie();
        if ($id) {
            $em = $this->getDoctrine()->getManager();
            $mag = $em->getRepository('MangaBundle:Magazine')->find($id);
            $entity->addMagazine($mag);
            }
        $form   = $this->createForm(new SerieType(), $entity);

        return array(
            'serie' => $entity,
            'form'   => $form->createView(),
        );
    }

public function createAction(Request $request)
    {
        $entity  = new Serie();
        $form = $this->createForm(new SerieType(), $entity);
        $form->bind($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $magazines = $entity->getMagazines();
            foreach($magazines as $magazine){
                $em->persist($magazine);
            }
            $em->flush();

            return $this->redirect($this->generateUrl('serie_show', array('id' => $entity->getId())));
        }

        return array(
            'serie' => $entity,
            'form'   => $form->createView(),
        );

但是,当我尝试这样做时,我明白了:

Unable to find Serie entity.

404 Not Found - NotFoundHttpException

出现以下错误:

  

INFO - 匹配路线“serie_show”(参数:“_ control”:   “MyList \ DB \ MangaBundle \ Controller \ SerieController :: showAction”,“id”:   “创造”,“_路德”:“serie_show”)

在showAction中有这个不应该发生的事情:

public function showAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('MangaBundle:Serie')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Serie entity.');
        }


        $deleteForm = $this->createDeleteForm($id);

        return array(
            'serie'      => $entity,
            'delete_form' => $deleteForm->createView(),
        );
    }

我无法弄清楚在createAction的重定向中将'create'作为id发送会发生什么。任何人都可以帮我弄清楚我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

仔细查看INFO通知(顺便说一下,这不是错误,它是一个日志条目):

  

" id":"创建"

这里发生了什么:

  1. "创建"正作为showAction
  2. 的参数传递
  3. 实体经理搜索标有Serie id。
  4. create实体
  5. 它找不到它并抛出NotFoundException
  6. 您确定Serie实体设置正确吗?通常id应该是自动生成的整数:

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
    

    似乎在实例化新的Serie时,它会被创建"字符串为$id值。

    另外,我无法弄清楚newAction这里的目的是什么。它返回一个大数组,仅此而已。

    我认为某些内容与路由混杂在一起,createAction()是从其他地方调用的,而不是你想的那样,因为肯定它不会从newAction() SerieController中调用