2014-03-13 70 views
1

我想在我的Symfony 2.4應用程序中根據Doctrine自動生成一個slug,其中slug是基於創建記錄的年份而唯一的。我正在使用DoctrineExtensions。從Doctrine創建自動生成段落

爲我的博客記錄我想要的路線是/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

我希望兩個蛞蝓是my-blog-title,如它們是基於創建的獨特記錄。

所以,我的兩條航線將被

/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")

所以這只是我的創建日期的年份作爲基礎,所以我如果記錄在不同的年份,可以有相同的slu but,但如果記錄在同一年,則可以不是相同的slu gs。

我知道我可以拉日到塞本身

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

可能有人請幫助這個?

非常感謝!

回答

1

我終於想出了一個解決方法,或者它是正確的做法!?

因爲我需要unique_base來引用創建一個記錄的年份,而不是完整的時間戳,我做了一個名爲slugBase的新字段。

slugBase不是唯一的,可以從格式爲「Y」的createdAt字段彈出。所以,如果在2014年3月2日slugBase創建一個記錄將自動設置爲「2014」

所以現在,當標題改變,蛞蝓將只有標題創建蛞蝓,使用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}