Ошибка сериализации Symfony2() при смещении
Я пытаюсь сериализовать массив php в xml, но здесь что-то не так. Проблема также может быть связана с rabbitmq.. Были подобные ошибки и раньше после внедрения 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');
}
Ошибка:
Примечание: несериализация(): Ошибка при смещении 0 на 30 байт
500 Внутренняя ошибка сервера - исключение ContextErrorException
json-часть работает просто отлично, но сериализация в xml приводит к ошибке. Кто я такой пропал без вести здесь?
Редактировать: Часть трассировки стека ошибки.
[2015-10-05 12:37:13] просьба.КРИТИЧЕСКОЕ: Неперехваченное исключение PHP Symfony\Компонент\Отладка\Исключение\Контекстное исключение: "Уведомление: несериализовать(): Ошибка при смещении 0 из 30 байт"в C:\wamp\www\Projects\myproject\v.0.1\vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php строка 63 {"исключение": "[объект] (Symfony\Компонент\Отладка\Исключение\Исключение из контекста (код: 0): Обратите внимание: несериализация(): Ошибка при смещении 0 из 30 байт в C:\wamp\www\Projects\myproject\v.0.1\vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php:63)"} []
Правка2: Кажется, здесь происходит что-то еще. Это показано в полной трассировке стека:
Vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php ', '63', массив ('msg'=>объект(amqpmessage), 'MessageBody' => 'ошибка: Недействительный Ошибка символа'))
Почему это там?
Правка3: Я вставил несколько отголосков в код, непосредственно перед сериализацией, и сразу после нее, и он напечатал первый, но не второй.
echo "TESTING, ROW: ".__LINE__;
$xml = $serializer->serialize($options, 'xml');
echo "TESTING, ROW: ".__LINE__;
Я также поместил этот код в try-catch, но он не выдает никаких ошибок из-за этого..? Здесь происходит что-то темное...
Правка4: Я попробовал сериализатор с чем-то простым, как это:
$xml = $serializer->serialize(array("test"=>1), 'xml');
И это, кажется, работает просто отлично. Этот мне хочется спросить: какие символы не нравятся сериализатору в исходном массиве? К сожалению, я не могу показать внутренности массива, но если у кого-то есть какие-то идеи о недопустимых символах при использовании сериализатора, я был бы рад услышать.
1 answers
Похоже, сериализатору не понравились мои ключи массива. У меня были ключи, в которых были пробелы вот так:
array("spaced key" => $data);
Когда я изменил ключи на это:
array("spaced_key" => $data);
Это начало работать.