0

我遵循了本教程:http ://symfony.com/doc/current/cookbook/doctrine/file_uploads.html#using-lifecycle-callbacks

但是prePersist没有被触发(但实体被持久化到数据库中)。

   $media = new Media();
   $form = $this->createFormBuilder($media)
            ->add('file')
            ->getForm();

        if ($request->isMethod("POST")) {
            $form->bindRequest($request);

            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();

                $em->persist($media);
                $em->flush();
            }
    }

实体: http ://dpaste.com/869771/ (我刚刚复制并粘贴到课堂上的一些代码)

我添加了

die("test");

到上传功能,但它没有被调用。那么怎么了?有任何想法吗?我正在使用 sf 2.1。

4

3 回答 3

4

假设您在 pastebin 中粘贴的代码是准确的,那么问题是您正在尝试混合 xml 映射和注释映射。您需要使用一种或另一种方法。

此链接:http ://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html

显示如何将生命周期映射添加到 xml 文件。

于 2013-01-10T00:43:45.937 回答
1

但是 prePersist 没有被触发......上传功能

它不会被触发,因为您在 upload() 方法上使用PostPersist()而不是PrePersist()

PostPersist 在保存后被触发,而 PrePersist 在保存之前被触发!所以你会在保存之后而不是之前看到“死亡”。

此外,当使用 PrePersist 时,您的实体还没有 id,而使用 PostPersist 时,它会分配一个 id。

于 2013-01-09T19:58:52.500 回答
0

我不确定,但我认为因为您的Media实体没有任何映射字段,所以会忽略事件。
例如,尝试映射该name字段以查看它是否有效。
另外,请阅读有关跟踪政策的信息。

于 2013-01-09T20:13:40.893 回答