Symfony2 serialize()偏移量出错

时间:2015-10-05 09:51:28

标签: php symfony rabbitmq

我试图将一个php数组序列化为xml,但是有些东西在这里等待。问题也可能是与兔子有关的..在将rabbitmq实施到系统之前有类似的错误。

代码:

$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);

if($return_type == "xml")
{
      // Create xml-response out of the information found, and return it:
      return $serializer->serialize($options, 'xml');
}
else if($return_type == "json")
{
      // Create json-response out of the information found, and return it:
      return $serializer->serialize($options, 'json');
}

错误:

  

注意:unserialize():偏移量为0的错误为30个字节

     

500内部服务器错误 - ContextErrorException

json-part工作正常,但序列化为xml会产生错误。我在这里缺少什么?

修改 错误的堆栈跟踪的一部分。

  

[2015-10-05 12:37:13] request.CRITICAL:未捕获PHP异常   Symfony \ Component \ Debug \ Exception \ ContextErrorException:"注意:   unserialize():偏移量为0的30字节错误"在   C:\瓦帕\ WWW \项目\ myproject的\ v.0.1 \厂商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \的RabbitMQ \ RpcClient.php   第63行{"例外":" [对象]   (Symfony \ Component \ Debug \ Exception \ ContextErrorException(code:0):   注意:unserialize():在0的30字节偏移处出错   C:\瓦帕\ WWW \项目\ myproject的\ v.0.1 \厂商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \ RabbitMQ的\ RpcClient.php:63)"}   []

EDIT2: 这里似乎还有其他事情发生。它在完整的堆栈跟踪中显示了这一点:

  

供应商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \的RabbitMQ \ RpcClient.php',   ' 63',数组(' msg' =>对象(AMQPMessage),' messageBody' =>'错误:   无效的字符错误'))

为什么那样?

EDIT3: 在序列化之前,我在代码中加了一些回声,然后在它之后,它打印第一个而不是第二个。

echo "TESTING, ROW: ".__LINE__;
$xml = $serializer->serialize($options, 'xml');
echo "TESTING, ROW: ".__LINE__;

我也把这些代码放在try-catch中,但它没有给出任何错误..?这里有一些阴暗的事情......

Edit4: 我尝试使用这样简单的序列化器:

$xml = $serializer->serialize(array("test"=>1), 'xml');

这似乎工作得很好。这让我想问:在原始数组中,串行器没有什么字符?不幸的是,我无法展示阵列的内部,但如果有人对使用序列化器时不可接受的字符有一些想法,我很高兴听到。

1 个答案:

答案 0 :(得分:1)

似乎序列化器不喜欢我的数组键。我有像这样的空格键:

array("spaced key" => $data);

当我将钥匙改为:

array("spaced_key" => $data);

它开始起作用了。