JMS Serializer选择格式化属性

时间:2014-05-12 11:30:19

标签: symfony jmsserializerbundle

我使用Symfony2和FOSRestBundle创建一个RESTful应用程序。 FOSRestBundle使用JMS Seriazlizer将数据序列化为json格式。我有一切都在处理一个小问题。

这是我的实体类

class Profil
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="secteur", type="string", length=255)
     */
    private $secteur;

    /**
     * @var string
     *
     * @ORM\Column(name="nomProfil", type="string", length=255, unique=true)
     */
    private $nomProfil;

    /**
     * @ORM\Column(name="actif", type="boolean")
     */
    private $actif;

    /**
     * @ORM\Column(name="dateFin", type="date")
     */
    private $dateFin;

    /**
     * @ORM\Column(name="orderNumberMTC", type="integer", length=100, nullable=true)
     */
    private $orderNumberMTC;

     /**
      * @Gedmo\Slug(fields={"nomProfil"})
      * @ORM\Column(length=128, unique=true)
      */
    private $slug;

    /**
     * @ORM\OneToOne(targetEntity="Genius\ProfileBundle\Entity\Societe", cascade={"persist", "remove"})
     */
    private $societe;

     /**
     * @ORM\OneToOne(targetEntity="Genius\ProfileBundle\Entity\Coordonnees", cascade={"persist", "remove"})
     */
    private $coordonnees;

    /**
     * @ORM\OneToMany(targetEntity="Genius\ProfileBundle\Entity\Professionnel", mappedBy="profil", cascade={"persist", "remove"})
     */
    private $professionnels;

     /**
     * @ORM\OneToMany(targetEntity="Genius\ProfileBundle\Entity\Lien", mappedBy="profil",cascade={"persist"}, cascade={"persist", "remove"})
     */
    private $liens;

    /**
     * @ORM\OneToMany(targetEntity="Genius\ProfileBundle\Entity\Album", mappedBy="profil",cascade={"persist"}, cascade={"persist", "remove"})
     */
    private $albums;

    /**
     * @ORM\OneToMany(targetEntity="Genius\ProfileBundle\Entity\Photo", mappedBy="profil",cascade={"persist"}, cascade={"persist", "remove"})
     */
    private $photos;

   /**    
    * @ORM\OneToMany(targetEntity="Genius\ProfileBundle\Entity\Actualite", mappedBy="profil",cascade={"persist"}, cascade={"persist", "remove"})    
    */
    private $actualites;

控制器操作:

 public function getActualitesAction(Request $request, ParamFetcherInterface $paramFetcher)
    {
        $offset = $paramFetcher->get('offset');
        $offset = null == $offset ? 0 : $offset;
        $limit = $paramFetcher->get('limit');


        return $this->container->get('genius_profile.actualite.handler')->all($limit, $offset);
        //var_dump($this->container->get('genius_profile.profil.handler')->all($limit, $offset)); die();

    }

genius_profile.actualite.handler是一个ORM

这是json我得到的:

enter image description here

我试图通过Annotation Type

强制将属性actualitie添加到数组中

任何想法如何强制属性到数组?

github

中的报告问题

1 个答案:

答案 0 :(得分:0)

您可能会在某处过滤您的收藏或使用自定义键构建它,因此阵列的键不是按顺序排列的(例如[0 => Object, 2 => Object]没有1键)所以&#39 ; s序列化为对象(表示关联数组)而不是数组。

您应该为此字段创建虚拟属性或自定义访问者,并将集合返回为array_values(...),以便正确排序密钥,并将集合序列化为数组。