- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用Gedmo Sluggable Symfony2 中的行为,我需要知道是否有办法允许斜杠 (/) 和破折号 (-) 作为单词分隔符。换句话说,一个特定的分隔符与往常一样,但保留另一个特定的特殊字符,因此它被忽略。我想做这样的事情:
products/some-product
这允许我在 URL 中使用通过斜杠分类的 slugs,并通过破折号分隔空格。但是,例如,如果分隔符是“/”,则“-”也会被替换,而不是单独保留。
我查看了相关的 Sluggable 类代码( Urlizer )并看到很多正则表达式,但我不确定应该重写哪里以允许斜杠和/或破折号不被替换其他一切。
最佳答案
事实证明,您可以通过创建自己的扩展 Urlizer 的类,然后将其设置为监听器的可调用类(而不是 Gedmo 的类)来实现此目的。
使用 STOF 学说扩展时,会创建一个 sluggable 监听器作为服务,但它被设置为私有(private),因此您无法正常访问。因此,您必须首先在自己的配置中创建此监听器的别名:
services:
sluggable.listener:
alias: stof_doctrine_extensions.listener.sluggable
然后您必须创建您的类。有一个名为 setTransliterator() 的 setter ,您可以使用它来调用您自己的音译器,然后您可以使用它来注入(inject)修改 slugging 过程所需的内容。函数 postProccessText() 是您真正想要修改的内容,transliterate() 函数只是可调用的:
namespace My\Bundle\Util;
use Gedmo\Sluggable\Util\Urlizer as BaseUrlizer;
class Urlizer extends BaseUrlizer
{
public static function transliterate($text, $separator = '-')
{
// copy the code from the parent here
}
private static function postProcessText($text, $separator)
{
// copy code from parent, but modify the following part:
$text = strtolower(preg_replace('/[^A-Z^a-z^0-9^\/]+/', $separator,
preg_replace('/([a-z\d])([A-Z])/', '\1_\2',
preg_replace('/([A-Z]+)([A-Z][a-z])/', '\1_\2',
preg_replace('/::/', '/', $text)))));
}
}
postProcessText() 的正则表达式是您想要根据自己的喜好进行修改的内容。之后,您必须在坚持之前使您的函数可调用,然后就可以开始了:
// custom transliterator
$listener = $this->get('sluggable.listener');
$listener->setTransliterator(array('My\Bundle\Util\Urlizer', 'transliterate'));
$em->flush();
关于Symfony2 Sluggable 多个分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353685/
使用Gedmo Sluggable Symfony2 中的行为,我需要知道是否有办法允许斜杠 (/) 和破折号 (-) 作为单词分隔符。换句话说,一个特定的分隔符与往常一样,但保留另一个特定的特殊字符
我正在尝试将土耳其语字符转换为可读的 slug。但它因未定义而失败... 这里有什么问题? HTML Fıstıkçı Şahap Çık Dışarı Dağlarda Oyna Js: Strin
我正在尝试使用 Doctrine Extensions bundle 中的 Sluggable 行为: http://gediminasm.org/article/sluggable-behavior
我有一个名为 Vara 的类,其中有一个名为 searchname 的表字段。我想对 cviebrock eloquent sluggable 进行简单设置,但无法弄清楚问题所在。 当我保存我的模型时
我必须在现有实体中添加一个 slug 字段来对字段“名称”进行 slugify。但是这个实体中已经有数据,我无法删除它们。 我想创建一个控制台脚本,它可以对我所有的“名称”字段进行 slugify。
我正在尝试从 StofDoctrineExtensionsBundle 设置 Sluggable 以生成基于 slug 的主键 id 和名称字段 /** * @var string * @Gedm
我正在使用 Doctrine,通过 StofDoctrineExtensionsBundle 使用 DoctrineExtensions 使用“Doctrine Extensions Sluggabl
我正在尝试将默认分隔符更改为“+” /** * @var string $slug * @Gedmo\Slug(fields={"label"}, separator="+") * @ORM\C
Laravel 7.0 版,我正在使用 cviebrock/eloquent-sluggable包裹。 我要的是放@作为用户名的前缀。 我在 User 模型中包含了 Sluggable trait 并
我已安装 https://github.com/stof/StofDoctrineExtensionsBundle并在 Country 实体的特定字段上同时使用 Translatable 和 Slug
我正在尝试使用 gedmo 学说扩展来翻译实体。 https://github.com/Atlantic18/DoctrineExtensions 我使用 yml 作为 orm 映射文件(自动生成实体
当我尝试将 slug 添加到我的 laravel 项目时出现错误。 这是我的提供商Cviebrock\EloquentSluggable\ServiceProvider::class, 这是我的com
我试图在我的设置中添加 spatie/laravel-sluggable 但在终端中遇到了这个错误。我试图搜索这个但没有找到任何相关的解决方案。 这里是错误: Problem 1 - Conc
我正在尝试使用在这里找到的 Laravel 的 sluggable 包:https://github.com/cviebrock/eloquent-sluggable 当我保存一个模型(例如产品)时,
我试图在我的设置中添加 spatie/laravel-sluggable 但在终端中遇到了这个错误。我试图搜索这个但没有找到任何相关的解决方案。 这里是错误: Problem 1 - Conc
我是一名优秀的程序员,十分优秀!