2012-01-12 79 views
6
最简单的方法

目前我有平时的控制器/动作结构:Symfony2的:让rest风格的url

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

你问是什么让没有逻辑感。您不能让两个控制器处理请求并返回响应。你**可以**将它传递给'BlogController',然后将它转发到'PostController'上,但是使用一个控制器并使其对任何操作负责是很好的。 – JamesHalsall 2012-01-18 13:13:29

+0

@Jaitsu我不要求一种方式来处理多个控制器的请求。我不在乎路由如何工作。我想要的是一个RESTful url结构和一种构造控制器的方法,以便博客的东西可以通过BlogController处理,并且可以通过PostController处理发布的东西 – stoefln 2012-01-18 13:48:55

+0

我误解了原始问题。那么只需定义两条单独的路线有什么问题呢? – JamesHalsall 2012-01-18 13:53:46

回答

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中在你的路由配置

+0

看起来很熟悉... – maiwald 2012-01-28 23:32:19

+0

@maiwald:是的,我知道,没什么特别的。我希望有一个更“优雅”的解决方案。不过,我只是为了完整性而添加了这两行代码。 – stoefln 2012-01-29 11:36:43

8

这并不回答你的具体问题,但我想推荐一个更清晰的URL设计,更加RESTful。

与博客一起工作通常与/blogs基地资源进行交互。

POST /blogs创建一个博客。

GET /blogs列出所有的博客。

要使用特定的博客,然后指定哪个博客。

GET /blogs/:id获取具体博客的详细信息。

现在具体指定要与哪些博客子资源进行交互。

POST /blogs/:id/posts创建一个新帖子。

GET /blogs/:id/posts/:id要获取特定博客的特定帖子的详细信息。

+0

谢谢你,这是有道理的 – stoefln 2012-01-13 15:44:42

0

您是否可以不只是将具有两个参数的路线映射到细节操作?

我们为我们的路线使用注释,所以这就是我知道的:)但我想它的要点是相同的所有方法。

/** 
* @Route("/blog/{blog_hash}/post/{post_hash}", name="post_detail") 
*/ 

“问题”则是,你必须获取这篇文章的博客两个参数传递给URL帮手展示它的链接,而不仅仅是职位本身的时候。但我认为没有其他办法。

详细操作必须检查给定的url是否有效。我怀疑sf2会为你做到这一点。

+1

这确实是可能的。问题是你有一个控制器中的整个代码。我希望PostController能够处理发布内容和BlogController来完成博客内容。 – stoefln 2012-01-16 17:59:39

+0

非常真实。我很想知道如何干净地做我自己! – maiwald 2012-01-16 21:26:09