0

ページというエンティティに対して一意の 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.
}
4

1 に答える 1

0

参考までに、解決策は、ここで説明されているようにイベント リスナーを作成することでした。

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

于 2012-07-27T22:24:31.277 に答える