当我在“名称”字段中使用 Slug 和 Versioned 时,我对 Gedmo 扩展有一点问题。
/**
* @MongoDB\string
* @Gedmo\Translatable
* @Gedmo\Versioned
*/
protected $title;
/**
* @Gedmo\Slug(fields={"title"})
* @Gedmo\Versioned
* @MongoDB\string
*/
protected $name;
刷新 slug 后不会出现在 Gedmo 日志文件中。
我的结果:
'560ab47927987105118b4567' =>
object(Gedmo\Loggable\Document\LogEntry)[896]
protected 'id' => string '560ab47927987105118b4567' (length=24)
protected 'action' => string 'update' (length=6)
protected 'loggedAt' =>
...
protected 'objectId' => string '560ab323279871cf0b8b4569' (length=24)
protected 'objectClass' => string 'Acme\AcmeBundle\Document\Foo'
protected 'version' => int 2
protected 'data' =>
array (size=2)
'title' => string 'I'm a new title' (length=23)
// WHERE IS NAME FIELD ?
'content' => string '<p>It's a new version</p>' (length=35)
protected 'username' => string 'foo@barc.com' (length=20)
'560ab324279871cf0b8b456a' =>
object(Gedmo\Loggable\Document\LogEntry)[902]
protected 'id' => string '560ab324279871cf0b8b456a' (length=24)
protected 'action' => string 'create' (length=6)
protected 'loggedAt' =>
...
protected 'objectId' => string '560ab323279871cf0b8b4569' (length=24)
protected 'objectClass' => string Acme\AcmeBundle\Document\Foo'
protected 'version' => int 1
protected 'data' =>
array (size=3)
'title' => string 'I'm a title' (length=18)
'name' => null // First version name = null ???
'content' => string '<p>Hey i'm a content</p>' (length=27)
protected 'username' => string 'foo@bar.com' (length=20)
我找到了一个可能的解决方案,其中直接在 setTitle 中包含 slug:
/**
* Set title
*
* @param string $title
* @return self
*/
public function setTitle($title)
{
$this->title = $title;
$a = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','Ð','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','?','?','J','j','K','k','L','l','L','l','L','l','?','?','L','l','N','n','N','n','N','n','?','O','o','O','o','O','o','Œ','œ','R','r','R','r','R','r','S','s','S','s','S','s','Š','š','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Ÿ','Z','z','Z','z','Ž','ž','?','ƒ','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','?','?','?','?','?','?');
$b = array('A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','l','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o');
$this->setName(strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/','/[ -]+/','/^-|-$/'),array('','-',''),str_replace($a,$b,$title))));
return $this;
}