2012-01-12 56 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