2017-09-23 81 views
0

也許這是一個愚蠢的問題,但我花了很多時間試圖使它的工作...如何在傳遞參數的樹枝中生成url?

這是從我的路由文件:

search: 
    path: /search 
    defaults: { _controller: MyAppBundle:Default:search} 

我的樹枝模板:

{{ path('search', {'value': value}) }} 

而且我的控制器:

public function searchAction(Request $request){ 
     $value = $request->query->get('value'); 

我的問題是後續ING,上述數據我生成這個網址:

/search/value 

,而不是我想要的網址:

/search?value=value 

我喜歡乾淨的網址,但我需要使用通過在URL中的值「?」由於我需要在URL傳遞不同的價值觀和他們中的一些可以在不同情況下

+0

請參閱我的編輯#2評論。 –

+0

它必須工作!如果您將參數傳遞給樹枝中的路徑而無需將此參數添加到路由,它將向您顯示網址中的變量,而不會乾淨url –

回答

0

如果你面臨這樣的問題,請檢查你是不是通過你的參數在你的路由文件,並檢查你有沒有一種形式,你的HTML與崗位作爲方法(如果您有任何形式的POST方法,改變它得到將解決問題)

1

省略爲什麼不這樣做,而不是:

search: 
    path: /search/{value} 
    defaults: { _controller: MyAppBundle:Default:search} 

public function searchAction(Request $request, $value){ 
     // Do something with $value... 

它不涉及URL問題,但是你可以很容易地在你的Twig文件中設置值參數,這是在Symfony中完成它的標準方法。


編輯#2 - 基於評論。

我做的是這樣的:

{{ path('searchPet',{'petID': pet.getPetId}) }} 

在上述情況下,searchPet是路由,petID是參數名稱,並pet.getPetId是我pet方法;其中pet是我已經傳遞給控制器​​(Twig呈現)的請願Entitiy;所以我打電話getPetId(),它返回申請的Id。

所以,如果你在控制器這樣的渲染param是變量:

return $this->render('search.html.twig', array(
       'param' => 'test', 
       ... 
      )); 

然後在枝杈做到這一點:

{{ path('search', {'value': param}) }} 

那麼URL將是在這種情況下:/search/test


編輯#3 - 根據最新評論。

報價要發送,所以要送「測試」的值,這樣做:

{{ path('search', {'value': 'test'}) }} 

我測試了這一點 - 它的工作原理。

+0

感謝您的回覆。我總是以這種方式配置路由,但正如您所說的那樣,並沒有解決URL問題。如何在樹枝中設置值參數?我知道我可以手動創建網址,但我寧願不手動(例如,爲了避免將來需要更改域名) –

+0

是的,我明白你的意思。但我沒有任何問題通過我的價值觀枝(如果我正確理解你)。我的問題是產生在樹枝的URL,如果我在這方面,我都會越來越/搜索/值,而不是/搜索?值把所有=值我需要第二個選項 –

+0

沒有也不會等於「值」,如果你使用讓我們說'getMyValue'並返回一個整數。該URL可能是'/搜索/ 34237',即如果'getMyValue'返回'34237'爲整數。你明白嗎?它不等於「價值」! –