1

我想在我的 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

它让我使用相同的蛞蝓-my-blog-title

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

unique_base: createdAt("Y")

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

我知道我可以把日期拉到蛞蝓本身

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

有人可以帮忙吗?

非常感谢!!!

4

1 回答 1

1

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

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

slugBase 不是唯一的,并且可以从 createdAt 字段中以“Y”格式显示。因此,如果在 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}

于 2014-03-14T08:01:23.927 回答