ページというエンティティに対して一意の URL スラッグを作成しようとしています。スラッグは、サイトに関連するページでのみ一意である必要があります。
したがって、ページ {site1.com/about, site2.com/about} の URL スラッグは、ページを識別するのに十分に一意です。すべてのサイトでユニークなページを持つことは魅力的ではありません: site3.com/about-21 は奇妙です.
DoctrineExtensions sluggable でこれを実行しようとしましたが、何かカスタムを作成するよう提案されました。以下は私の最初の試みです。エンティティで EntityManager を取得できないため、他のスラッグが一意かどうかを確認するのに苦労しています。
助言がありますか?
/**
* Slugify Title. To "re-slugify", set titleSlug to empty
* @ORM\PrePersist
*/
public function slugifyTitle($override = false) {
// We only slugify is titleSlug is empty
if (empty($this->titleSlug) or $override) {
if (!empty($this->title)) {
// Title not empty? slugify the title. SluggableListener line 220
$slug = Urlizer::transliterate($this->title);
} else {
// Title empty? make a slug based on the classname
$slug = get_class($this);
}
$this->titleSlug = Urlizer::urlize($slug);
$this->titleSlug = $this->uniqueify($this->titleSlug);
echo $this->titleSlug;
};
}
/**
* Make the string unique in the domain of: This site, this pagetype
*/
public function uniqueify($someSlug) {
//return $someSlug . rand();
// FIXME :-)
$em = $this->get('doctrine')->getEntityManager();
$pageType = get_class($this);
$query = $em->createQuery("SELECT slug FROM Powma\ServiceBundle\Entity\$pageType pt");
$slugs = $query->getResult();
// find a unique one.
}