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


Populate a second entity after a form submit in Symfony2

我最近刚加入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();

它起作用了,但我不认为颜色应该在窗体或控制器中,图像实体也不应该。那么,我应该如何处理颜色呢?

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

  1. 创建一个条令侦听器(在prePersist和preUpdate上),该侦听器将在持久化Image时生成Colors

  2. flush之前,分派一个自定义事件并用EventListener捕获它。当被捕获时,执行填充Colors的方法。

解决方案1的优点:无论您在控制器、命令还是其他位置,都将自动为Image生成Colors

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