我正在配置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").
有什么解决方法吗?