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); 有关详细信息,请参见此处
如果您来自 symfony 1.x 背景,那么实体还有更多“魔法”可用,包括转换为数组的助手等等。
在 Symfony2 中,大部分魔力都消失了;特别是实体现在是普通的旧 PHP 对象,碰巧由 Doctrine 2 管理以持久保存到数据库,这意味着要toArray()
在域对象上使用诸如此类的方法,您必须自己实现它们。这应该是相当简单的——只需返回一个键值数组("name of property" => "value of property")
...如果您与其他实体建立了关系,您还需要toArray()
在这些实体上实现一个方法,然后只需从主函数中调用该方法转换时的实体。
然后,一旦你有了对象数组,$json = json_encode($array);
就会给你一个 JSON 字符串作为响应发送。
归档时间: |
|
查看次数: |
18274 次 |
最近记录: |