Symfony测试中如何设置带x-auth-token头和form-data参数的请求内容
问题解决说明
1. 请求头不生效的原因
Symfony测试客户端的$server参数要求自定义请求头遵循HTTP头的服务端转换规则:
- 头名称前加
HTTP_前缀 - 横杠替换为下划线
- 所有字母转为大写
你之前直接传x-auth-token不符合格式要求,被Symfony自动过滤了,所以请求里看不到这个头。
2. form-data参数设置方法
$client->request()方法的第三个参数就是POST表单参数数组,直接把data参数放在这里即可,值为你需要的JSON字符串。
修正后的代码
public function testUserRegister(){ $client = static::createClient(); // 自定义请求头需要加HTTP_前缀,转大写,横杠换下划线 $server = [ 'HTTP_X_AUTH_TOKEN' => '你的实际token值' ]; // 构造form-data参数,data值为JSON字符串 $postParams = [ 'data' => json_encode([ // 这里放你要提交的注册字段,比如手机号、密码之类的 'phone' => '13xxxxxxxxx', 'password' => 'test123456' ]) ]; // 第三个参数传POST表单参数 $client->request(Request::METHOD_POST, self::$uri, $postParams, [], $server); $response = $client->getResponse(); // 调试时可以打印请求头确认是否生效 // dd($client->getRequest()->headers->all()); self::assertEquals(Response::HTTP_CREATED, $response->getStatusCode()); }
补充说明
如果你的form-data还包含上传文件,把文件实例放到$client->request()的第四个参数数组里即可,格式和正常表单提交的文件结构一致。
内容的提问来源于stack exchange,提问作者a_fgr3
相关产品推荐
相关产品推荐

