Symfony 从实体标题创建 slug

fag*_*gyi 4 php doctrine slug symfony doctrine-orm

我有一个正在运行的博客,但我对漂亮的网址的想法有点晚了。

我不想使用 slugable 等捆绑包,因为我没有太多时间阅读文档并实现它们。

是否有可能在条令执行到数据库之前到达实体的字段并从中生成段头?

我在实体中想到了一个简单的解决方案,例如:

public function __construct() {
        $this->setPostedAt(new \DateTime());
        $this->setSlug();
    }
public function setSlug(){
        $tmpslug = (string)$this->id."-";
        $tmpslug .= $this->slugify($this->title);

        $this->slug = $tmpslug;
    }
Run Code Online (Sandbox Code Playgroud)

然而,这将不起作用,因为调用 constructor() 时 id 和 title 字段为空。

有没有不需要实现新扩展的快速解决方案?

谢谢!

xur*_*d29 5

我不认为 Sluggable(来自 DoctrineExtensions)会比重新发明就绪轮花费更多时间。我会使用它,需要 10 分钟才能准备好使用。

  1. 添加"stof/doctrine-extensions-bundle": "~1.1@dev"composer.json
  2. 将配置添加到config.yml

配置:

stof_doctrine_extensions:
    orm:
        default:
            uploadable: false
            sluggable: true
            timestampable: false
            translatable: false
            tree: false
            blameable: false
            loggable: false
            sortable: false
            softdeleteable: false
Run Code Online (Sandbox Code Playgroud)
  1. slug将字段和 getter/setter添加到您的实体

代码:

private $slug;
public function getSlug() {...}
public function setSlug($slug) {...}
Run Code Online (Sandbox Code Playgroud)
  1. 添加xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"doctrine-mappingENTITY.orm.xml 中的部分(如果您使用的是 xml)
  2. 将 slug 字段添加到您的 ENTITY.orm.xml(如果您使用的是 xml);

代码:

<field name="slug" column="slug" type="string">
    <gedmo:slug fields="title(OR_YOUR_DESIRED_FIELD)" unique="true" updatable="true" />
</field>
Run Code Online (Sandbox Code Playgroud)

就是这样,你可以忘记它,你不需要设置,事件监听器会关心它。