php - Symfony 从实体标题创建 slug

标签 php symfony doctrine-orm doctrine slug

我有一个可用的博客,但我对好的 url 的想法有点晚了。

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

是否有可能到达一个实体的字段并在 Doctrine 执行到数据库之前从中生成 slug?

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

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

        $this->slug = $tmpslug;
    }

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

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

谢谢!

最佳答案

我不认为 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
  1. slug 字段和 getter/setter 添加到您的实体

代码:

private $slug;
public function getSlug() {...}
public function setSlug($slug) {...}
  1. xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping" 添加到您实体中的 doctrine-mapping 部分。 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>

就是这样,你可以忘记它,你不需要设置,事件监听器会处理它..

关于php - Symfony 从实体标题创建 slug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27464155/

相关文章:

symfony - PHP 7 和 Doctrine Group 使用

php - 获取数组的最后时间

php - .php 脚本显示 mySQL 内容

php - WordPress、重定向和 WPML

symfony - createQueryBuilder 与 Join in Doctrine

php - 尝试运行向下/回滚命令时找不到 Doctrine Migration 类错误

php - 照亮\数据库\QueryException

doctrine-orm - 如何处理大量的学说收藏和协会

php - Symfony2-Doctrine2 继承仍然无法正常工作

sql - 如何与 Doctrine 建立联合?