我正在尝试为名为 Page 的实体制作独特的 url slug。slug 应该只在与站点相关的页面上是唯一的。
因此,页面 {site1.com/about、site2.com/about} 的 url slug 足以识别页面。在所有网站上拥有唯一的页面将没有吸引力:site3.com/about-21 很奇怪。
我试图用 DoctrineExtensions sluggable 来做到这一点,但得到了写一些自定义的建议。下面是我的第一次尝试。因为我无法在 Entity 中获取 EntityManager,所以我无法让其他 slug 检查它们是否是唯一的。
有什么建议么?
/**
* 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.
}