在Symfony2中提交表单后填充第二个实体

时间:2016-05-12 09:21:31

标签: php forms symfony entity

我最近新的Symfony(2.8)和我尝试过,在从表单提交图像文件后,是用图像的主要颜色填充第二个实体。

现在,我刚从控制器那里做了一个测试:

if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($image);

        $extractor->setImage($image->getFile());
        $palette = $extractor->extractPalette();

        foreach($palette as $color => $weight){
            $imageColor = new Color();
            $imageColor->setImage($image);
            $imageColor->setRgb($color);
            $imageColor->setWeight($weight);

            $em->persist($imageColor);

        }

        $em->flush();

它正在工作,但我不认为颜色应该是形式,或者控制器也不是图像实体。 那么,我该如何处理颜色?

1 个答案:

答案 0 :(得分:1)

我有两个解决方案可以将synchronized保存在控制器之外:

  1. 创建一个Doctrine侦听器(在prePersist和preUpdate上),当Colors持久存在时,将生成Colors

  2. Image之前,调度自定义事件并使用EventListener捕获它。捕获时,执行填充flush

  3. 的方法

    解决方案1的优势: Colors将自动为Colors生成,无论您是在Controller,Command还是其他任何位置。

    解决方案2的优势:您可以通过调度自定义事件,更准确地决定何时生成颜色。