Sf2.0、標準ブログなど。symfony 2モデル別ルーティング
のrouting.ymlのコード:
DevBlogBundle_post_show:
pattern: /posts/{id}
defaults: { _controller: "DevBlogBundle:Post:show" }
requirements:
_method: GET
id: \d+
私が使用して私のポストのためのURLを生成する標準的な方法:
path('DevBlogBundle_post_show',{'id':post.id})
私は記事のリストが含まれるすべての私temlates /レイアウト、このconstrutionを使用。もし私がpost_showのルートを変更したいのなら(スラグパラメータを追加する/posts/{id}.{slug})、私はすべての私のtemlatesを変更する必要があります。
public function getUrl(){
return $this->generator->generate('DevBlogBundle_post_show',array (...params...));}
質問:どのように私は私がしなければならないものを、私のPostモデルにこのジェネレーターを取得することができ、「使用して...」とどのようにルートを生成する代わりに、私は、私のPostモデルによってルートを生成するような何かをしたいです?
<a href="{{ post.getUrl() }}" ...>...</a>
感謝を事前に:私のテンプレートで
は私が置きたいです。
まず、getUrlをモデルに入れるのは悪い考えです。なぜなら、モデルはむしろばかばかしく、URLの生成方法を知らないからです。 1つの方法は、あなた自身のtwig拡張を作成することです。これは、特定のタイプのオブジェクト(例えば、投稿を呼び出してurlを返します)を呼び出すことができます。 '{{post | url}}'ここに枝を伸ばすことについて:http://www.kiwwito.com/article/extending-twig-in-symfony-2-add-custom-functions – Sgoettschkes
私はtwig extを作り出す方法を知っています。そしておそらく、あなたは正しいでしょう。 私RoRの "to_param"のようなものを作成しようとすると、標準の "path"と "url"の代わりに使用する1つのtwig extを作成します – ZloyPotroh
この場合、Sluggableバンドルを見たいと思うかもしれません。あなたが探している:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/sluggable.md – Sgoettschkes