加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:24:28 所属栏目:百科 来源:网络整理
导读:我正在开发游戏应用程序和使用Symfony 2.0。我有很多AJAX请求到后端。更多的响应是将实体转换为JSON。例如: class DefaultController extends Controller{ public function launchAction() { $user = $this-getDoctrine() -getRepository('UserBundle:User'
我正在开发游戏应用程序和使用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');
    }
}

所有我的控制器做同样的事情:获得一个实体,并将其某些字段编码为JSON。我知道我可以使用规范化和编码所有的权限。但是如果一个实体循环链接到其他实体呢?还是实体图很大?你有什么建议吗?

我想到一些编码架构的实体…或使用NormalizableInterface避免循环..,

另一个选择是使用 JMSSerializerBundle.然后在你的控制器中
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($doctrineobject,'json');
return new Response($reports); // should be $reports as $doctrineobject is not serialized

您可以通过使用实体类中的注释来配置如何完成序列化。请参阅上面链接中的文档。例如,以下是排除关联实体的方法:

/**
* IddpRorBundleEntityReport
*
* @ORMTable()
* @ORMEntity(repositoryClass="IddpRorBundleEntityReportRepository")
* @ExclusionPolicy("None")
*/
....
/**
* @ORMManyToOne(targetEntity="Client",inversedBy="reports")
* @ORMJoinColumn(name="client_id",referencedColumnName="id")
* @Exclude
*/
protected $client;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读