1

Symfony 2.4 アプリケーションで Doctrine からスラッグを自動生成したいと考えています。このスラッグは、レコードが作成された年に基づいて一意です。DoctrineExtensions を使用しています。

私のブログの記録では、ルートを/blog/{year}/{slug}

だから私はこれらの2つのレコードを持っているとしましょう

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-titlecreatedAt に基づく一意のレコードであるため、両方のスラッグを にしたい

したがって、私の2つのルートは次のようになります

/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 がすべてのレコードに対して一意であるため、私のレコードのいずれか 2 つがまったく同じ作成日を持つことはほとんど不可能であるため、機能します。

したがって、3 番目のレコードを追加すると:

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

同じスラッグを使用できます-my-blog-title

私のorm.ymlファイルで、次のようなことができるようにしたい

unique_base: createdAt("Y")

そのため、作成した日付の年のみがベースとして使用されるため、レコードが異なる年にある場合は同じスラッグを持つことができますが、レコードが同じ年にある場合は同じスラッグを持つことはできません。

ナメクジ自体に日付を取り込むことができることを知っています

2014-my-blog-titleしかし、それは次のように見える必要があります2014/my-blog-title

誰かがこれを手伝ってくれませんか?

どうもありがとう!!!

4

1 に答える 1

1

私は最終的に回避策を見つけましたか、それとも正しい方法でしょうか!?

完全なタイムスタンプではなく、レコードを作成した年を参照するには unique_base が必要なので、slugBase という新しいフィールドを作成しました。

slugBase は一意ではなく、「Y」形式の createdAt フィールドからスラガブルです。したがって、2014 年 3 月 2 日にレコードが作成された場合、slugBase は自動的に「2014」に設定されます。

したがって、タイトルが変更されると、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 に答える