2012-04-25 56 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