事實證明,你可以通過創建自己的類,它擴展Urlizer,然後將其設置爲可調用的聽衆,而不是Gedmo的類做到這一點。
當使用STOF主義的擴展,一個sluggable監聽器被作爲一種服務創建的,但它被設置爲私有,所以你不能正常上網。所以你必須首先在你自己的配置中給這個監聽器創建一個別名:
services:
sluggable.listener:
alias: stof_doctrine_extensions.listener.sluggable
然後你必須創建你的類。有一個名爲setTransliterator()二傳手,你可以用它來調用自己的transliterator,然後你就可以用它來注入您需要修改猛擊過程是什麼。該功能postProccessText()是你真正想要的修改,該音譯()函數究竟什麼是可調用:
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();