Symfony控制器调用JsonResponse::fromJsonString报错原因咨询
问题解答:JsonResponse::fromJsonString 方法不存在错误
嘿,这个问题我之前帮同事排查过,原因很明确:你的Symfony版本太低了!
错误原因
JsonResponse::fromJsonString() 这个静态方法是Symfony 5.1版本才新增的特性。如果你的项目使用的是5.1之前的Symfony版本(比如4.x、5.0),这个方法根本不存在,自然会抛出「Attempted to call method...」的错误。
解决方案
根据你的情况,有两种可行的解决办法:
方案1:升级Symfony版本(推荐,如果你能升级的话)
直接把项目的Symfony核心组件升级到5.1或更高版本,之后就能正常使用fromJsonString()方法了。
方案2:用兼容低版本的写法替代
如果暂时没法升级版本,完全可以用现有版本支持的写法达到同样的效果:
- 方法A:直接实例化JsonResponse,传入已序列化的JSON字符串
因为你已经用JMS序列化器得到了JSON字符串,只需要在实例化时加上最后一个参数true,告诉JsonResponse传入的是已编码好的JSON:$serializer = $this->container->get('jms_serializer'); $json = $serializer->serialize($idata, 'json'); $response = new JsonResponse($json, 200, [], true); - 方法B:直接传递数组给JsonResponse(更高效)
其实你没必要先把数据序列化成JSON字符串,JMS序列化器可以直接把对象转成数组,再传给JsonResponse让它自己处理编码,这样还能避免重复的JSON处理步骤:$serializer = $this->container->get('jms_serializer'); $dataArray = $serializer->toArray($idata); $response = new JsonResponse($dataArray);
内容的提问来源于stack exchange,提问作者net
相关产品推荐
相关产品推荐

