我最近新的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();
它正在工作,但我不认为颜色应该是形式,或者控制器也不是图像实体。 那么,我该如何处理颜色?
答案 0 :(得分:1)
我有两个解决方案可以将synchronized
保存在控制器之外:
创建一个Doctrine侦听器(在prePersist和preUpdate上),当Colors
持久存在时,将生成Colors
。
在Image
之前,调度自定义事件并使用EventListener捕获它。捕获时,执行填充flush
。
解决方案1的优势: Colors
将自动为Colors
生成,无论您是在Controller,Command还是其他任何位置。
解决方案2的优势:您可以通过调度自定义事件,更准确地决定何时生成颜色。