【发布时间】:2015-11-30 15:55:34
【问题描述】:
我正在配置包含在VichUploaderBundle 中的directory namer 以上传多个文件。
我有两个实体 Soundtrack 和 Song。 Songs 的集合在我的控制器中处理如下:
//...
if ($form->isValid()) {
$soundtrack->setSlug("sw-ep-vii");
$soundtrack->setName("Star Wars Episode VII");
foreach ($soundtrack->getSongs() as $song) {
$em->persist($song);
}
$em->persist($soundtrack);
$em->flush();
}
当持久化$soundtrack VichUploaderBundle 上传Song 文件并将它们移动到config.yml 中定义的目录或在名为DirectoryNamer 的服务中定义的动态路由,这是我感兴趣的.
在我的SoundtrackDirectoryNamer 中,持久化的Song 实体会自动传递给directoryName() 方法,所以我只想返回关联的Soundtrack.id 作为目录名称,例如:
class SoundtrackDirectoryNamer implements DirectoryNamerInterface
{
public function directoryName($song, PropertyMapping $mapping)
{
return $song->getSoundtrack()->getId();
}
}
现在的问题是Soundtrack 仍然没有持久化到数据库中,所以它还没有自动递增的id。
如果我将$song->getSoundtrack()->getId() 更改为$song->getSoundtrack()->getSlug(),它会正确创建目录sw-ep-vii,并且一切正常——因为我之前使用$soundtrack->setSlug("sw-ep-vii") 在控制器中设置了slug。
有什么解决方法吗?
【问题讨论】:
标签: symfony doctrine vichuploaderbundle