ddd/slug

v1.0 2013-08-15 13:34 UTC

This package is not auto-updated.

Last update: 2024-09-09 13:01:18 UTC


README

Slug 是一个组件,可以轻松生成任何持久化机制下的 slugs(Propel2、Doctrine2、自定义 ORM 等)。

生成字符串的 slug 总共有两步

  • 转写步骤,将给定的字符串从任何书写系统(法语、德语、希腊语、阿拉伯语...)转换为 ASCII 表示形式。
  • slug 生成步骤,基本上是使用自定义分隔符分隔每个单词和字段。

因此,Slug 组件有 2 个服务:TransliteratorInterfaceSlugGeneratorInterface。每个这些服务都可以有多个实现

  • LatinTransliterator:将用任何拉丁字母表(法语、德语、西班牙语...)写的字符串转写为其 ASCII 等价物。
  • DefaultSlugGenerator:自定义单词和字段分隔符。
  • PatternSlugGenerator:完全自定义 slug 生成。

安装

使用 Composer,只需要求 ddd/components

{
    "require": {
        "ddd/components": "dev-master"
    }
}

用法

要能够将实体或模型转换为 slug,您只需实现 SluggableInterface

<?php

use Ddd\Slug\Model\SluggableInterface;
use Ddd\Slug\Service\SlugGeneratorInterface;

class Article implements SluggableInterface
{
    private $createdAt;
    private $title;
    private $slug;

    public function slugify(SlugGeneratorInterface $slugifier)
    {
        $this->slug = $slugifier->slugify(array($this->createdAt->format('Y'), $this->title));
    }

    // other methods...
}

然后,您只需调用 slugify 方法来生成 slug

use Ddd\Slug\Infra\SlugGenerator\DefaultSlugGenerator;
use Ddd\Slug\Infra\Transliterator\LatinTransliterator;

$article = new Article();
$article->setTitle('Hello world!');
$article->slugify(new DefaultSlugGenerator(array(new LatinTransliterator())));

echo $article->getSlug(); // writes "2013-hello-world"

致谢