我正在尝试为名为Page的实体创建唯一的url slug。 slu are应该只是与网站相关的页面唯一。
因此页面{site1.com/about,site2.com/about}的url slugs足以识别页面。在所有网站上拥有唯一的网页将没有吸引力:site3.com/about-21很奇怪。
我尝试使用DoctrineExtensions缓慢执行此操作,但得到了to write自定义的建议。以下是我的第一次尝试。因为我无法在Entity中获取EntityManager,所以我很难找到其他slu to来检查它们是否是唯一的。
有什么建议吗?
/**
* 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.
}
答案 0 :(得分:0)
作为参考,解决方案是创建一个事件监听器,如下所述:
http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html