2012-04-25 106 views
0
// route 
TestTestAppBundle_foobar: 
    pattern: /foobar 
    defaults: { _controller: TestTestAppBundle:Default:fooar } 


//controller 

public function foobarAction(Request $request) 
    { 
     $request = $this->getRequest(); 
     $method = $request->getMethod(); 
     $var = $request->query->keys(); 
     $response = new Response('Content', 200, array('content-type' => 'text/html')); 
     $response->setContent($var); 
     return $response; 
    } 

當我撥打電話到URL如何在Symfony2中解析獲取url?

/foobar的?富=酒吧

,則返回空數組。相反,它應該返回GET參數。

如何在symfony中處理GET請求?

+0

我找到了解決方法,這是nginx和php-fpm的問題,nginx是刪除所有的查詢參數。 – Tauquir 2012-07-13 07:15:42

回答

2

嘗試pattern e.g

pattern: /foobar/ 

加斜槓它還將確保路線將同時匹配/foobar/foobar/模式。

2

它永遠不會這樣工作有兩個原因:

  • 據我所看到的,它變得查詢字符串,因爲它應該,但setContent是有點混亂。第一個參數不應該是數組,而是字符串。因此$var[0]將工作並將內容設置爲foo

  • 此外,您的路由有點不對。您的模式是/foobar,但您試圖打開/foobar/,這是不相同的。如果您設置了pattern: /foobar/,則可以同時使用/foobar//foobar(實際上重定向到/foobar/)。

然而,query->keys()這將返回只是在這種情況下的鍵。如果您想要同時獲得密鑰和值,則只應使用query->all()query->get('foo'),以獲取foo的值。

此外,您不需要使用$request = $this->getRequest();,因爲請求已經是您的操作中的第一個參數。你可以直接使用它。

setContent在這種情況下也是無用的,因爲Response的第一個參數已經調用它,所以你可以在不使用額外函數調用的情況下在那裏設置它。

+0

我更新了問題。順便說一句query-> get('foo')給我NULL – Tauquir 2012-04-25 11:40:12

+1

在海報的辯護中,我認爲他正在試驗這個框架。他還想打印GET參數作爲輸出。我認爲那裏沒有任何問題。由於'$ var'爲空,他在設置Response時沒有遇到異常情況。 – 2012-04-25 11:43:16

+0

@ m2mdas是的。我正在試驗這個框架。並通過打印檢查每個東西 – Tauquir 2012-04-25 11:46:57