Symfony2的。 json输出,序列化

时间:2014-03-18 00:17:56

标签: symfony

一个Symfony2新手问题。

我在以下代码中遗漏了什么(它返回"在非对象上调用成员函数getArrayResult())"

 /**
 * Lists all Post entities.
 *
 * @Route("/jsonout", name="Mario_Post_jsonout")
 * @Method("GET")
 * @Template()
 */
public function jsonoutAction()
{
  $response = new Response();

  $em = $this->getDoctrine()->getEntityManager();
  $query = $this->getDoctrine()
           ->getRepository('MarioBlogBundle:Post')
           ->createQueryBuilder('e')
           ->select('e')
           ->getQuery();

  $results = $query->execute();    
  $myArray = $results->getResult(Query::HYDRATE_ARRAY);  // neither ->getArrayResult(); 
  $response->setContent(json_encode($myArray));
  $response->headers->set('Content-Type', 'application/json');
  return $response;
}

我是否需要使用'使用Doctrine \ ORM .....;'线?究竟是哪一个? 谢谢

2 个答案:

答案 0 :(得分:2)

根据我的经验,方法getResult()getArrayResult()附带$query对象而不是$result对象。因此,我们不希望同时使用->execute()getResult()。这是代码中的错误。我们可以重写你的代码,

public function jsonoutAction()
{
  $response = new Response();

  $em = $this->getDoctrine()->getEntityManager();
  $query = $this->getDoctrine()
           ->getRepository('MarioBlogBundle:Post')
           ->createQueryBuilder('e')
           ->select('e')
           ->getQuery();

  $results = $query->getArrayResult();    //or   getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);

  $response->setContent(json_encode($results));
  $response->headers->set('Content-Type', 'application/json');
  return $response;
}

它会起作用。

答案 1 :(得分:0)

两个建议:

1)你可以说,你不需要execute查询     $query->getResult()将返回对象数组。如果你     希望将结果作为可以使用的纯数组     $query->getArrayResult()将返回找到的值数组。     如果要全部选择,也不需要使用select('e')     列。

2)如果您想获得没有任何条件和条件的所有记录,您可以使用findAll();返回实体中所有对象的数组:

$em = $this->getDoctrine()->getEntityManager();
$results = $em->getRepository('MarioBlogBundle:Post')->findAll();

现在通过安装和使用这个类EntitySerializer,你可以拥有数组输出或只有JSON输出(你想要的)。对于你的例子,它将是:

$entitySerializer = new Bgy\Doctrine\EntitySerializer($em);
$jsonOutput = $entitySerializer->toJson($results);