【发布时间】:2015-06-17 10:12:42
【问题描述】:
我在使用 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 时不再在浏览器上工作。
【问题讨论】:
-
作为一个肮脏的技巧,您始终可以在调用
$client->request(...)之前通过发出$_GET['url'] = 'some url';填充 $_GET 变量(顺便问一下,您的第二种方法有什么问题?它应该可以从浏览器也是) -
问题是这个生成的URL是
/get/http:%2%2....的形式; Apache 将其解释为/get/http://并丢失(抛出 404)。有一些方法可以解决这个问题,但你需要访问 Apache 配置 - 我没有。 -
好的,所以问题与 apache(您之前提供的链接)有关,所以我想您现在被这个肮脏的伎俩困住了。
标签: symfony silex web-testing