目前我有通常的Controller / Action结构:
BlogController:
/blog/list
/blog/create
/blog/detail/my-blog-hash
和PostController
/post/create
/post/detail/my-post-hash
我想要的是博客帖子详情视图的网址:
/blog/detail/my-blog-hash/post/my-post-hash
我知道有一个RESTBundle,但是这让IMO过于复杂,并且路由和表单验证存在一些我无法解决的真正问题(即使在IRC的帮助下)。 我不需要JSON,序列化器,特殊视图等的访问点,我只需要一种方法来以某种方式堆栈控制器。
有人可以帮我这个吗?
答案 0 :(得分:8)
这不能回答您的具体问题,但我想推荐一个更清晰的更清晰的URL设计。
使用博客一般与/blogs
基础资源进行互动。
POST /blogs
创建博客。
GET /blogs
列出所有博客。
要使用特定博客,请指定哪个博客。
GET /blogs/:id
获取特定博客的详细信息。
现在具体说明您要与之互动的博客子资源。
POST /blogs/:id/posts
创建新帖子。
GET /blogs/:id/posts/:id
获取特定博客特定帖子的详细信息。
答案 1 :(得分:1)
RESTful思考,你有两个资源:博客和帖子。
在RESTful路由中,http动词隐含了该动作。我知道你不在Rails中,但这些简单的表格说明了做REST和RESTful嵌套资源的“Rails方式”:
http://edgeguides.rubyonrails.org/routing.html#crud-verbs-and-actions
http://edgeguides.rubyonrails.org/routing.html#nested-resources
非常干净。
答案 2 :(得分:0)
您能否只将具有两个参数的路线映射到详细操作?
我们正在为我们的路线使用注释,这就是我所知道的:)但我认为它的要点对于所有方法都是一样的。
/**
* @Route("/blog/{blog_hash}/post/{post_hash}", name="post_detail")
*/
'问题'那就是你必须获取帖子的博客,以便在显示链接时将两个参数传递给URL助手,而不仅仅是帖子本身。但我认为还有其他办法。
详细操作必须检查给定的URL是否有效。我怀疑sf2会为你做那件事。
答案 3 :(得分:0)
我安装了RestBundle,经过几个小时后我再次将其删除,原因是路线不灵活(至少我没有找到如何相应地设置路线)。
之后我就像在普通控制器中一样设置路线。所以我添加了这样的路由注释:
// BlogController
@ORM\Route("blogs/{blogHash}", name="blog_detail")
public function detailAction(Blog $blog)
和
// PostController
@ORM\Route("blogs/{blogHash}/post/{postHash}", name="blog_post_detail")
public function detailAction($blogHash, $postHash)
重要提示:您必须在路由配置中的BlogController之前包含PostController