0

I'm kind of new with Symfony, and I have a question. I'm currently making a Gallery Bundle (consisting of 'Gallery' and 'Image' entities), and here comes my problem.

I can upload images as well as use my entity Image corresponding to the file, but then I'd like to categorize my images into galleries. I made a One-To-Many relationship between my Gallery and Image entities, with an ArrayCollection $images (into Gallery Entity) that should represents the images.

Now, how can I populate that $images variable from a browser ? I thought of that solution : add a text field into the Gallery entity, with the images names, and before persisting the Gallery entity, I would fetch the corresponding Images entities and put them into my variable $images, but the problem is that I can't access the entity manager from an entity..

Thanks for the help, if you need code I can of course show you, even if it's pretty basic.

EDIT: I found a way to get access to the entity manager from an entity, but it is said to be unsecure. For the time being I'll probably use that, but if someone can explain to me a better way, I'll take it.

4

2 回答 2

0

我不知道我是否遗漏了一些重要的东西,这迫使您手动填充 $images,但是要从浏览器填充多个图像库并坚持下去,我将按照以下步骤操作:

  1. 使用实体中的表单构建器来创建映射表单。
  2. 使用控制器动作来持久化(你应该有你的学说映射)
  3. 使用学说 eventos:preUpdate、prePersist、PostPersist 等来正确上传图像文件。

如您所见,烹饪书是一个很好的参考。它将指导您完成 Web 开发中最常见的任务。

于 2013-05-10T15:28:03.890 回答
0

您可以编写一个注入实体管理器的服务,该服务可以从一组 $image 名称创建和/或更新画廊,并让您的控制器调用它,而不是让您的实体依赖于实体管理器。例如:(参见上面的链接了解如何在 services.yml 中配置服务)

class GalleryManager
{
    private $entityManager;

    public function __construct(\Doctrine\ORM\EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function updateGalleryImages(Gallery $gallery, array $imageNames)
    {
        ...
    }
}

但是,我不确定在这里输入图像名称是否是最好的方法。您将如何确保您的图像名称是唯一的?处理未找到的名称?处理重复的名称?界面的可用性是否重要?效率如何 - 每个图像名称一次查询?一个画廊可能包含多少?

另一种用户界面是提供某种图像搜索/列表,并允许用户从结果中选择图像以添加到图库中 - 在这种情况下,如果正确实施,选择应该作为图像实体数组返回。最简单的情况是,对于少量图像,这可能只是一个包含所有图像名称的多选列表框,尽管理想情况下用户希望看到他们正在选择的图像的缩略图预览。

所有图像名称(或一组复选框)的基本列表框可以使用带有用于图像集合的实体字段的表单(data_class Gallery)来实现。这将直接映射到画廊-> 图像上,并且实体永远不需要依赖 EntityManager。

从一组过滤的图像中进行选择更为复杂,但如果您感兴趣,我可以为您指出正确的方向。

于 2013-05-10T15:15:21.703 回答