2013-04-29 3 views
4

Мой выход XML выглядит странно, когда я запросить XML ..FOSRestBundle выход неправильно XML

Контроллер:

use FOS\RestBundle\Controller\Annotations as REST; 
class RestController { 
    /** 
    * @REST\View 
    */ 
    public function getAgenciesAction() { 
     return array("bb"=>array('zz'=>'vv'),'zz'); 
    } 
} 

заголовок запроса: Aceept: application/xml

Response:

<?xml version="1.0" encoding="UTF-8"?> 
<result> 
    <entry> 
    <entry><![CDATA[vv]]></entry> 
    </entry> 
    <entry><![CDATA[zz]]></entry> 
</result> 

Почему возвращается только конечный узел, а не все ключи и значения?

+0

Не забудьте принять ответ. –

ответ

4

XML-сериализатор в FOSRestBundle не сериализует массивы с помощью ключа. Каждая запись массива будет отображаться как <entry> в ответе, независимо от ключа. Результат в вашем примере правильный. Ключи только в соответствующем json-файле.

Сериализованные лица имеют правильный вывод, так как поле будет приводить к <field>value</field>

Пример контроллера

/** 
* @ApiDoc(
*  description="Returns the own user details", 
*  statusCodes={ 
*   200="Returned when successful", 
*   403="Returned when missing permissions", 
*  } 
*) 
* 
* @Rest\Get("https://stackoverflow.com/users/me") 
* @Rest\View(serializerGroups={"details"}) 
*/ 
public function getMeAction() 
{ 
    $user = $this->getUser(); 

    return array('user' => $user); 
} 

и ответ. Вы видите, что ключ user выводится как <entry>.

<?xml version="1.0" encoding="UTF-8"?> 
<result> 
    <entry> 
    <id><![CDATA[517781e2e707a00217000000]]></id> 
    <username><![CDATA[admin]]></username> 
    <email><![CDATA[[email protected]]]></email> 
    <company><![CDATA[acme]]></company> 
    </entry> 
</result> 
+0

Прохладный! это действительно интересно :) –

Смежные вопросы