我有很多ORM实体,我想将它们链接到相应的文件。示例:带有MotorsFile的实体汽车,带有HousesFile的房屋,......
可以轻松定义这些ORM实体。这不是问题。但是,我的问题是:"是否可以在使用OneupUploaderBundle时定义许多ORM实体,例如我们的MotorsFile和HousesFile?"
我问过这个问题,因为处理这些带有教义的上传文件需要为PostUploadEvent
和PostPersistEvent
创建一个事件监听器。事件监听器就是这样的:
<?php
namespace Acme\HelloBundle\EventListener;
use Oneup\UploaderBundle\Event\PostPersistEvent;
use Minn\AdsBundle\Entity\MotorsAdsFile;
class UploadListener
{
protected $manager;
public function __construct(EntityManager $manager)
{
$this->manager = $manager;
}
public function onUpload(PostPersistEvent $event)
{
$file = $event->getFile();
$object = new MotorsFile();
$object->setFilename($file->getPathName());
$this->manager->persist($object);
$this->manager->flush();
}
}
但是,这段代码只允许我持久化一个实体(例如MotorsFile)。那么,是否可以指定上传的文件对应哪个实体?
...谢谢
答案 0 :(得分:2)
你基本上有两个选择。
鉴于您为不同的文件上传使用不同的映射,您可以使用将为每个映射分派的generic events。
每次上传后,不仅会执行oneup_uploader.post_upload
的侦听器,还会执行特殊事件oneup_uploader.post_upload.{mapping}
的侦听器,其中{mapping}
是{{1}中配置的名称}}
我们假设您的配置与此类似:
config.yml
将文件上传到oneup_uploader:
mappings:
motors:
frontend: blueimp
storage:
directory: %kernel.root_dir%/../web/uploads/motors
houses:
frontend: blueimp
storage:
directory: %kernel.root_dir%/../web/uploads/houses
映射后,将调度通用事件motors
。 oneup_uploader.post_upload.motors
映射也是如此。
如果您不想使用不同的上传处理程序,您还可以检查houses
。
type
<?php
namespace Acme\HelloBundle\EventListener;
use Oneup\UploaderBundle\Event\PostPersistEvent;
use Minn\AdsBundle\Entity\MotorsAdsFile;
class UploadListener
{
public function onUpload(PostPersistEvent $event)
{
$type = $this->getType();
}
}
将为$type
或motors
,具体取决于文件上传到服务器的映射配置。