2013-10-08 54 views
0

我正在處理的項目包含搜索功能。我希望用戶能夠爲他們的查詢添加書籤,以便他們可以爲他們的搜索頁添加書籤。Symfony URL組織

在傳統的實現中,我只需在URL中使用GET參數。

然而,用symfony我有一個很難理解什麼是最好使用此功能?這只是一個偏好問題嗎?

我應該創建一個控制器,例如:

search/{query}/{page}

當上的選項,用戶點擊

description/{id}

,或者我應該落實在URL傳統GET變量:

例如,請注意URL的堆棧溢出。當你搜索某些東西並且瀏覽頁面時,這個URL就像這樣:

search?q="nav&page=2但是當你點擊一個帖子的時候,URL變成類似questions/19157969/expanded-navigation-by-default的東西,所以它就是兩者的混合。

無法SO使用類似search/search-term-here/2爲相同的功能?使用Symfony來選擇GET方面有沒有什麼好處?

我欣賞任何建議!提前謝謝了!

回答

0

這是一個偏好問題。有人說,爲了SEO目的,URL比查詢字符串更重要。此外,/ search/{query}/{page}通常會更好看,但這只是我的看法。

0

搜索字詞會變得很長。也許你的搜索機制相當簡單,但我個人不想做出這樣的假設,特別是如果你打算在將來還沒有設計規模時使用相同的功能。

使用典型的GET字符串,在我看來是足夠安全,控制器應該知道它需要什麼變量,GET查詢一般​​不(應該)對路由的影響。

但是,如果你想實現這總可以重新相當搜尋網址,你可以嘗試在數據庫中存儲的每個搜索。

一個例子(未測試):

class SearchController extends Controller 
{ 
    /** 
    * @Route("/search" name="search") 
    * @Method("GET") 
    */ 
    public function searchAction(Request $request) 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $search = new Search(); 
     $search->setQuery($request->query); 
     // The query field would be of an object type in this example, 
     // but you could store the data any way you want really. 

     // Add any additional information about the search/request to the entity. 

     $em->persist($search); 
     $em->flush(); 

     $this->redirect($this->generateUrl('search_results', array(
      'search_id' => $search->getId() 
     ))); 
    } 

    /** 
    * @Route("/search/{search_id}", name="search_results") 
    * @Method("GET") 
    * @Template() 
    */ 
    public function resultsAction($search_id) 
    { 
     $em = $this->getDoctrine()->getManager(); 

     if(! $search = $em->getRepository('AcmePostBundle:Search')) { 
      throw $this->createNotFoundException(); 
     } 

     $query = $search->getQuery(); // This will be a ParameterBag 

     // Run your search filters 

     return array(
      // Your search results 
     ); 
    } 
} 

在這個例子中該請求是用GET串爲正常(可能是POST如果您願意),從而節省了搜索數據的動作,然後重定向至從數據庫獲取搜索數據的操作,執行過濾並顯示結果。

我看不到像這樣的技術有任何實際性能損失,數據庫查詢插入和選擇搜索應該相對較小,但我可以看到你存儲它們的表格非常快速地變得非常滿。

隨後又總是有用的(偶爾)吸取熱門搜索詞報告。