WebTestCase,Silex和$ _GET

时间:2015-06-17 10:12:43

标签: symfony silex web-testing

我在使用Silex的WebTestCase上遇到一些问题:在我的控制器操作之一上,我需要一个通过普通$ _GET传递的参数(我必须是因为它是一个URL,并且Apaches解释%2F,如果它在外面查询字符串 - 例如,参见Url Variables with %2f not handled by silex

以下是我的路线定义方式:

$controller
   ->get('/get', <controller action>)
   ->value('url', (!empty($_GET['url']) ? $_GET['url'] : false));

它在浏览器中运行良好,但它似乎不像WebTestCase那样工作:$_GET保持空白......

$client = $this->createClient();
$client->request('GET', '/get?url=' . urlencode($url));

修改

我刚做了一个快速的实验:如果我在路线上做了以下事情:

$controller
        ->get('/get/{url}', <action>)
        ->assert('url', '.*');

这在测试中:

$client = $this->createClient();
$client->request('GET', '/get/' . urlencode($url));

一切都很好,$ url被传递给控制器​​......但是,当它通过Apache时它不再适用于浏览器。

1 个答案:

答案 0 :(得分:1)

服务器全局变量(如$ _GET)由Apache填充。运行功能测试时,会跳过Apache,因此不会再填充$ _GET。您应该使用Request对象来提取GET参数,而不是使用服务器全局变量。这样,框架将拦截PHPUnit注入的变量和Apache注入的变量;然后,它将通过可以作为函数参数注入的Request对象在您的action方法中使用它们。

示例如何提取url参数:

$url = $request->query->get('url');