Php 条令扩展:在刷新到数据库之前生成slug

Php 条令扩展:在刷新到数据库之前生成slug,php,symfony,doctrine-orm,stofdoctrineextensions,Php,Symfony,Doctrine Orm,Stofdoctrineextensions,使用StofDoctrineExtensionsBundle(对于Symfony),我根据实体机构的属性internationalName为其生成一个slug,如下所示: Institution.php /** * @ORM\Column(type="string", length=100, unique=true) * @Gedmo\Slug(fields={"internationalName"}) */ private $slug; 在我的配置设置中,我设置了sluggable:t

使用
StofDoctrineExtensionsBundle
(对于Symfony),我根据实体
机构的属性
internationalName
为其生成一个slug,如下所示:

Institution.php

/**
 * @ORM\Column(type="string", length=100, unique=true)
 * @Gedmo\Slug(fields={"internationalName"})
 */
private $slug;
在我的配置设置中,我设置了
sluggable:true
,在创建新的
机构或更新现有机构时,生成唯一的slug会按照预期工作

在刷新到数据库之前,我需要在控制器中生成slug。问题是,slug是在将新实体刷新到数据库时生成的。我搜索了这个问题,发现了两个没有令人满意答案的问题

最好的建议是更改实体中的
getSlug()
,如下所示:

public function getSlug()
{
    if (!$this->slug) {
        return Urlizer::urlize($this->getInternationalName());
    }
    return $this->slug;
}
但是,我的实体的
internationalName
不必是唯一的,因此如果数据库中已经存在
internationalName
,则“预刷新的slug”可以是现有的,这会在我的控制器中造成问题


是否有一种解决方案来生成独特的段塞预冲洗

冲洗前为什么需要鼻涕虫?如果你在冲洗前使用了鼻涕虫,你不确定冲洗后的鼻涕虫是同一个鼻涕虫。否则,请选中
\Gedmo\Sluggable\SluggableListener::makeUniqueSlug
,然后重新使用该逻辑。@StephanVierkant,实体是与一个或多个上载的文件一起创建的。我希望这些文件的命名基于实体的slug,而slug是基于
internationalName
。现在你会说,直接基于
国际名称
,但问题是对于两个同名实体,文件将被覆盖。为什么你不能在刷新后上传文件?@StephanVierkant,我使用的是负责上传的Vich Uploaderbundle,这似乎是不可能的。