Symfony 2 Doctrine export to JSON


Symfony 2 Doctrine export to JSON

我正在使用Symfony 2与Doctrine 2创建一个iOS应用程序的web服务(JSON)。

获取我的实体i do:

$articles = $this->getDoctrine()->getRepository('UdoPaddujourBundle:MenuArticle')->findAll();

我必须告诉你:

$article = array();
$article = $articles->toArray();

给出以下错误:

Fatal error: Call to a member function toArray() on a non-object

也是一样
$article = $articles->exportTo('json');

如何创建json响应

亲切的问候,Cearnau丹

编辑:Var_dump ($articles) =

array(18) {
   [0]=>
     object(Udo'PaddujourBundle'Entity'MenuArticle)#50 (4) {
    ["id":"Udo'PaddujourBundle'Entity'MenuArticle":private]=>
    int(1)
    ["name":"Udo'PaddujourBundle'Entity'MenuArticle":private]=>
    string(17) "My Article Name 1"
    ["description":"Udo'PaddujourBundle'Entity'MenuArticle":private]=>
    string(26) "My Article Description 1"
    ["price":"Udo'PaddujourBundle'Entity'MenuArticle":private]=>
    float(20)
    }
   [1]=> ...

- LATER EDIT

如何循环通过所有的"属性名称"?这是我得到的:

$myarray=array(); 
$myArray["name"]=array(); 
$myArray["description"]=array(); 
foreach($articles in $article) 
{ 
  array_push($myArray["name"], $article->getName());
  array_push($myArray["description"], $article->getDescription()); 
}

如果你使用原则查询,你也可以这样做:

$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery('SELECT ma FROM UdoPaddujourBundle:MenuArticle ma ...etc');
$myArray = $query->getArrayResult();
然后使用json_encode($myArray);

如果你来自symfony。在X背景中,实体有更多的"魔力"可用,包括帮助转换为数组等等。

在Symfony2中,大部分魔法都消失了;实体现在是普通的老式PHP对象,碰巧由Doctrine 2管理,用于数据库的持久化,这意味着要在域对象上使用toArray()之类的方法,您必须自己实现它们。这应该是相当微不足道的-简单地返回一个键值数组与("name of property" => "value of property")…如果你与其他实体建立了关系,你也需要在这些实体上实现一个toArray()方法,并且在你转换的时候简单地从主实体调用它。

然后,一旦你有了你的对象数组,$json = json_encode($array);将给你一个JSON字符串作为你的响应发送。

当您的实体(或任何其他对象)实现JsonSerializable时,您可以使用json_encode($articles):

<?php
namespace My'AppBundle'Entity;
use JsonSerializable;
class Channel implements JsonSerializable
{
    /*
     * All your fields, getters and setters.
     */
    /**
     * Returns serializable items.
     *
     * @return array
     */
    public function jsonSerialize()
    {
        return [
            'name' => $this->getName(),
            'description' => $this->getDescription(),
        ];
    }
}