我正在配置VichUploaderBundle中包含的目录命名器以上传多个文件。
我有两个实体Soundtrack
和Song
. s的集合Song
在我的控制器中处理,如下所示:
//...
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")
.
有什么解决方法吗?