Symfony 2 Doctrine导出到JSON

Dan*_*nau 6 php json doctrine web-services symfony

我正在使用Symfony 2和Doctrine 2为iOS应用程序创建Web服务(JSON).

要获取我的实体我做:

$articles = $this->getDoctrine()->getRepository('UdoPaddujourBundle:MenuArticle')->findAll();
Run Code Online (Sandbox Code Playgroud)

我必须告诉你:

$article = array();
$article = $articles->toArray();
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Fatal error: Call to a member function toArray() on a non-object
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了

$article = $articles->exportTo('json');
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建一个json响应?

亲切的问候,Cearnau Dan

编辑: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]=> ...
Run Code Online (Sandbox Code Playgroud)

- 稍后编辑

我怎样才能遍历所有"属性名称"?这就是我所拥有的:

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

cod*_*boy 14

如果您使用学说查询,您也可以这样做:

  $em = $this->getDoctrine()->getEntityManager();
  $query = $em->createQuery('SELECT ma FROM UdoPaddujourBundle:MenuArticle ma ...etc');
  $myArray = $query->getArrayResult();
Run Code Online (Sandbox Code Playgroud)

然后是json_encode($ myArray); 有关详细信息,请参见此处


Pro*_*tic 3

如果您来自 symfony 1.x 背景,那么实体还有更多“魔法”可用,包括转换为数组的助手等等。

在 Symfony2 中,大部分魔力都消失了;特别是实体现在是普通的旧 PHP 对象,碰巧由 Doctrine 2 管理以持久保存到数据库,这意味着要toArray()在域对象上使用诸如此类的方法,您必须自己实现它们。这应该是相当简单的——只需返回一个键值数组("name of property" => "value of property")...如果您与其他实体建立了关系,您还需要toArray()在这些实体上实现一个方法,然后只需从主函数中调用该方法转换时的实体。

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