【问题标题】:Create auto-generate a slug from Doctrine prefixed by year从 Doctrine 创建自动生成一个以年份为前缀的 slug
【发布时间】:2014-04-18 21:00:05
【问题描述】:

我想在我的 Symfony 2.4 应用程序中从 Doctrine 自动生成一个 slug,其中 slug 根据创建记录的年份是唯一的。我正在使用 DoctrineExtensions。

对于我的博客记录,我希望路由为 /blog/{year}/{slug}

假设我有这两条记录

id: 1 title: My Blog Title createdAt: 2013-08-14 18:48:21

id: 2 title: My Blog Title createdAt: 2014-02-01 17:12:10

我希望两个 slug 都是 my-blog-title,因为它们是基于 createdAt 的唯一记录

所以我的两条路线将是

/blog/2013/my-blog-title /blog/2014/my-blog-title

但是,我似乎无法让它工作:

这是我的 orm.yml 的相关部分

fields: title: type: text slug: type: text gedmo: slug: unique_base: createdAt fields: - title createdAt: type: datetime gedmo: timestampable: on: create

这行得通,因为 createdAt 对于所有记录都是唯一的,因为我的任何两条记录几乎不可能有相同的创建日期直到完全相同的秒。

所以如果我添加第三条记录:

id: 3 title: My Blog Title createdAt: 2014-03-02 17:12:10

它让我可以使用相同的 slug - my-blog-title

在我的 orm.yml 文件中,我希望能够执行类似的操作

unique_base: createdAt("Y")

所以只有我创建日期的年份作为基础,所以如果记录在不同年份,我可以有相同的 slug,但如果记录在同一年,则不能有相同的 slug。

我知道我可以将日期放入 slug 本身

2014-my-blog-title 但它需要看起来像 2014/my-blog-title

有人可以帮忙吗?

非常感谢!!!

【问题讨论】:

    标签: doctrine-orm slug symfony-2.4 doctrine-extensions


    【解决方案1】:

    我终于想出了一个解决方法,或者也许这是正确的方法!?

    因为我需要 unique_base 来引用我创建记录的年份,而不是完整的时间戳,所以我创建了一个名为 slugBase 的新字段。

    slugBase 不是唯一的,并且可以从 createdAt 字段中以“Y”格式进行slugable。所以如果在 2014-03-02 创建了一条记录,slugBase 会自动设置为“2014”

    所以现在,当标题改变时,slug 只会根据标题创建一个 slug,使用 slugBase 作为 unique_base

    这是我的 orm.yml

    fields:
        title:
            type: text
        slugBase:
            type: text
            gedmo:
                slug:
                    unique: false
                    dateFormat: "Y"
                    fields:
                        - createdAt
        slug:
            type: text
            gedmo:
                slug:
                    unique_base: slugBase
                    fields:
                        - title
        createdAt:
            type: datetime
            gedmo:
                timestampable:
                    on: create
    

    这很好用,因为每次创建/更新记录时我都不必手动执行任何操作。

    但显然,在查找记录时,我将不得不通过 slugBase 和 slug 进行搜索。所以我的新路线是/blog/{slugBase}/{slug}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多