【发布时间】:2012-03-15 20:28:22
【问题描述】:
Sf2.0,以标准博客为例。
routing.yml 代码:
DevBlogBundle_post_show:
pattern: /posts/{id}
defaults: { _controller: "DevBlogBundle:Post:show" }
requirements:
_method: GET
id: \d+
我使用以下标准为我的帖子生成网址:
path('DevBlogBundle_post_show',{'id':post.id})
我在我的所有模板/布局中都使用了这种结构,其中包括帖子列表。如果我想更改 post_show 的路线(比如...添加 Slug 参数 /posts/{id}.{slug}),我将需要更改所有模板。相反,我想通过我的 Post 模型生成路线,例如:
public function getUrl(){
return $this->generator->generate('DevBlogBundle_post_show',array (...params...));}
问题:如何将这个生成器添加到我的 Post 模型中,我必须“使用...”什么以及如何生成路线?
在我想要放置的模板中:
<a href="{{ post.getUrl() }}" ...>...</a>
提前致谢。
【问题讨论】:
-
首先将getUrl放到你的模型中是个坏主意,主要是因为模型应该是相当愚蠢的,不知道如何生成url。一种方法是创建自己的 twig 扩展,它可以在特定类型的任何对象上调用(例如帖子并返回 url。你会做类似
{{ post|url }}的事情在这里阅读关于扩展 twig:kiwwito.com/article/… -
我知道如何创建树枝分机。也许,你是对的。我只是尝试创建像 RoR“to_param”这样的东西。我将创建一个 twig ext,我将使用标准的“path”和“url”来代替。
-
在这种情况下,您可能需要查看 Sluggable 捆绑包。也许这就是你要找的东西:github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/…
-
我认为这是一个重要的问题。如果我的想法是正确的,在 sf1 中可以将整个对象传递给路由助手并让 symfony 提取参数。因此,最好执行
path('DevBlogBundle_post_show',{'post':post})或path('DevBlogBundle_post_show',post)之类的操作并让助手提取必要的属性。但似乎不可能……有什么想法吗?