如何在 symfony2 中创建 slugify?

Posted

技术标签:

【中文标题】如何在 symfony2 中创建 slugify?【英文标题】:How can I create slugify in symfony2? 【发布时间】:2013-06-19 21:14:45 【问题描述】:

我已经开始使用 symfony2 并且发现了一些 symfony 1.4 中存在的功能,例如 slugify。我需要这个来改善褶皱。

【问题讨论】:

【参考方案1】:

使用 l3ppard 的 sluggable extension ( GitHub repository) ...

... 或 KnpLabs sluggable behavior ( GitHub repository )。

【讨论】:

非常感谢 nifr。我会试试的。我也看到了stof。你认为女巫是最好的选择 StofDoctrineExtensions 在 symfony2 中提供了更简单的集成(注册服务、设置监听器),但不是扩展本身。 游戏晚了,但对于大多数用例来说,非独特的 slug 几乎没用。 我找到了这个库 - github.com/cocur/slugify。效果很好。【参考方案2】:

我使用 util.php 进行 slugify。虽然它不需要 Symfony,但可以很好地使用它。

util::slugify('This is a random --string with an Ãccent');
=> Returns 'this-is-a-random-string-with-an-accent'

【讨论】:

【参考方案3】:

如果你有 php-intl :

/**
 * Transform (e.g. "Hello World") into a slug (e.g. "hello-world").
 *
 * @param string $string
 *
 * @return string
 */
public function slugify($string)

    $rule = 'NFD; [:Nonspacing Mark:] Remove; NFC';
    $transliterator = \Transliterator::create($rule);
    $string = $transliterator->transliterate($string);

    return preg_replace(
        '/[^a-z0-9]/',
        '-',
        strtolower(trim(strip_tags($string)))
    );

要不然看看the doctrine extensions

【讨论】:

这个答案非常简单,只要启用了 Transliterator,它似乎就可以很好地工作。谢谢。 没有足够多的人知道将非 ascii 输入(如带有重音符号的法语或应该转换为 ae 等的 æ)转换为 ascii 是一个由 unicode 以标准方式长期解决的问题跨度> Doctrine 扩展使用Behat Transliterator

以上是关于如何在 symfony2 中创建 slugify?的主要内容,如果未能解决你的问题,请参考以下文章

在将 RabbitMQ Bundle 用于 Symfony2 时防止在 RabbitMQ 中创建多个连接

如何在 Symfony2 中创建和注册新角色

在 symfony2 中创建表

如何从 symfony2 中删除实体

如何访问 Symfony2 中的嵌套参数值?

如何创建将在 Symfony2 中过期/销毁会话的命令控制台?