Symfony2:获取RESTful网址的最简单方法

时间:2012-01-12 21:47:55

标签: rest routing symfony

目前我有通常的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,序列化器,特殊视图等的访问点,我只需要一种方法来以某种方式堆栈控制器。

有人可以帮我这个吗?

4 个答案:

答案 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