我最近刚加入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
保存在控制器之外:
-
创建一个条令侦听器(在prePersist和preUpdate上),该侦听器将在持久化
Image
时生成Colors
。 -
在
flush
之前,分派一个自定义事件并用EventListener捕获它。当被捕获时,执行填充Colors
的方法。
解决方案1的优点:无论您在控制器、命令还是其他位置,都将自动为Image
生成Colors
。
解决方案2的优势:您可以通过调度自定义事件来更准确地决定何时生成颜色。