相关疑难解决方法(0)

如何在Symfony 2.0 AJAX应用程序中将Doctrine实体编码为JSON?

我正在开发游戏应用程序并使用Symfony 2.0.我对后端有很多AJAX请求.更多的响应是将实体转换为JSON.例如:

class DefaultController extends Controller
{           
    public function launchAction()
    {   
        $user = $this->getDoctrine()
                     ->getRepository('UserBundle:User')                
                     ->find($id);

        // encode user to json format
        $userDataAsJson = $this->encodeUserDataToJson($user);
        return array(
            'userDataAsJson' => $userDataAsJson
        );            
    }

    private function encodeUserDataToJson(User $user)
    {
        $userData = array(
            'id' => $user->getId(),
            'profile' => array(
                'nickname' => $user->getProfile()->getNickname()
            )
        );

        $jsonEncoder = new JsonEncoder();        
        return $jsonEncoder->encode($userData, $format = 'json');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的所有控制器都做同样的事情:获取一个实体并将其一些字段编码为JSON.我知道我可以使用规范化器并对所有权限进行编码.但是,如果一个实体已经循环链接到其他实体呢?或实体图非常大?你有什么建议吗?

我想一下实体的一些编码模式......或者NormalizableInterface用来避免循环..,

ajax doctrine symfony doctrine-orm

87
推荐指数
10
解决办法
11万
查看次数

如何将Doctrine2结果对象作为关联数组?

我有一个简单的实体,它是一个包含我的用户数据的表,我想将特定用户的所有列作为数组获取然后json_encode它们但我得到的是一个实体对象,我必须为每个值使用get方法.我只想要一个用户表值的关联数组.我尝试过但不起作用的代码(返回的实体对象)如下:1.

$qb = $this->em->createQueryBuilder();
$qb->add('select', 'a')
->add('from', 'Entities\Adminprofile a')
->add('where', 'a.userid = 3333');
$accounts = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

2.

$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333'));
Run Code Online (Sandbox Code Playgroud)

PS:即时通讯使用z2d2 Project,这是doctrine2集成到Zend框架中.

doctrine zend-framework doctrine-orm

19
推荐指数
3
解决办法
4万
查看次数

如何将对象转换为数组(Symfony)?

这就是我创建数组的方式fields

public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
  {
    $page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
    $fields =  (array) $page;
    return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
  }
Run Code Online (Sandbox Code Playgroud)

输出是:

array:3 [?
  "\x00App\Entity\Pages\x00id" => 3
  "\x00App\Entity\Pages\x00name" => "cat"
  "\x00App\Entity\Pages\x00color" => ""
]
Run Code Online (Sandbox Code Playgroud)

但我实际上需要这个结果:

array:3 [?
  "id" => 3
  "name" => "cat"
  "color" => ""
]
Run Code Online (Sandbox Code Playgroud)

根据我所做的更改的建议:

public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
  {
    $page = $this->getDoctrine()->getManager()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
    $fields =  get_object_vars($page);
    return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
  }
Run Code Online (Sandbox Code Playgroud)

但这会输出一个空数组。

arrays oop object symfony doctrine-orm

1
推荐指数
1
解决办法
4770
查看次数

标签 统计

doctrine-orm ×3

doctrine ×2

symfony ×2

ajax ×1

arrays ×1

object ×1

oop ×1

zend-framework ×1