从响应api symfony创建对象

时间:2018-04-05 21:37:23

标签: php rest symfony

我试图封装来自symfony api的数据。

有我的serialization.yml:

AppBundle\Entity\Parcs:
attributes:
    id:
        groups: ['parcs']
    latitude:
        groups: ['parcs']
    longitude:
        groups: ['parcs']
    sac:
        groups: ['parcs']
    name:
        groups: ['parcs'] 

还有我的ParcsController

 /**
 * @Rest\View(serializerGroups={"parcs"})
 * @Rest\Get("/parcs")
 */
public function getParcsAction(Request $request)
{
    $parcs = $this->get('doctrine.orm.entity_manager')
            ->getRepository('AppBundle:Parcs')
            ->findAll();
    /* @var $parcs Parc[] */

    return $parcs;
}

根据这些数据,我想获得[id, sac, name, Coordinate[latitude, longitude]]

PS:我还在学习symfony,如果你有一个很好的教程,我也会很开心。很多!

1 个答案:

答案 0 :(得分:1)

您只在那里定义了组,但实际上您没有使用序列化程序“使用”它们。您需要安装和配置Serializer Component https://symfony.com/doc/current/components/serializer.html

接下来,您需要扩展AbstractController,其中包含一个整齐的json()方法,该方法会自动确定已加载serializer服务,并会自动序列化您的数据。

 // extends AbstractController

 /**
* @Rest\View(serializerGroups={"parcs"})
* @Rest\Get("/parcs")
*/
public function getParcsAction(Request $request)
{
   ... everything you said

return $this->json($parcs);
}  

编辑: 此外,我发现您希望latitudelongitude成为不同对象的一部分(来自您的回复示例)。如果是这种情况,则需要将这两个属性定义为该新对象(serialization.yml)的一部分。它们不能成为Parcs实体的一部分,您需要创建一个新实体。