Symfony2中的Angularjs ajax请求和带关系的Doctrine json响应

Symfony2中的Angularjs ajax请求和带关系的Doctrine json响应,json,angularjs,symfony,doctrine-orm,Json,Angularjs,Symfony,Doctrine Orm,我正在尝试与Symfony2、Doctrine和Angujarjs合作。Symfony2或Doctrine没有问题,但我在使用angularjs的ajax请求时遇到了问题。要么它没有加载任何东西,而我在加载json时犯了一个错误(json来自Symfony及其工作模式),要么它正在工作,但json不包含任何关系数据 那么,正确的方法是什么 A:使用关系数据(如文章和类别)为angularjs创建响应 B:将请求的json加载到angularjs变量中 这是我的controller.js var

我正在尝试与Symfony2、Doctrine和Angujarjs合作。Symfony2或Doctrine没有问题,但我在使用angularjs的ajax请求时遇到了问题。要么它没有加载任何东西,而我在加载json时犯了一个错误(json来自Symfony及其工作模式),要么它正在工作,但json不包含任何关系数据

那么,正确的方法是什么 A:使用关系数据(如文章和类别)为angularjs创建响应 B:将请求的json加载到angularjs变量中

这是我的controller.js

var app = angular.module("MyApp", []) .config(['$interpolateProvider', function ($interpolateProvider) {

    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');

}]);

app.filter('offset', function() {

    return function(input, start) {
        start = parseInt(start, 10);
        return input.slice(start);    
    };

});

app.filter('htmlToPlaintext', function() {

    return function(text) {
        return String(text).replace(/<[^>]+>/gm, '');
    };

});

app.controller("PaginationCtrl", function($scope, $http) {

    $scope.articlesPerPage = 8;
    $scope.currentPage = 0;

        function htmlToPlaintext(text) {
            return String(text).replace(/<[^>]+>/gm, '');
        }

    // this should load the json from '/admin/jsonallarticles' into the articles variable
    $http.get('/admin/jsonallarticles').success(function(data) {
        $scope.articles = data;
    });

    $scope.range = function() {
        var rangeSize = 5;
        var ret = [];
        var start;
        start = $scope.currentPage;

        if ( start > $scope.pageCount()-rangeSize ) {
            start = $scope.pageCount()-rangeSize+1;
        }

        for (var i=start; i<start+rangeSize; i++) {
            ret.push(i);
        }

        return ret;
    };

    $scope.prevPage = function() {
        if ($scope.currentPage > 0) {
        $scope.currentPage--;
        }
    };

    $scope.prevPageDisabled = function() {
        return $scope.currentPage === 0 ? "disabled" : "";
    };

    $scope.pageCount = function() {
        return Math.ceil($scope.articles.length/$scope.articlesPerPage)-1;
    };

    $scope.nextPage = function() {
        if ($scope.currentPage < $scope.pageCount()) {
            $scope.currentPage++;
        }
    };

    $scope.nextPageDisabled = function() {
        return $scope.currentPage === $scope.pageCount() ? "disabled" : "";
    };

    $scope.setPage = function(n) {
    $scope.currentPage = n;
    };

});
编辑的控制器

我尝试使用Symfony附带的序列化程序

    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new GetSetMethodNormalizer());

    $serializer = new Serializer($normalizers, $encoders);

    $articles = $this->getDoctrine()
            ->getRepository('AcmeBlogBundle:Articles')
            ->findAll();

    if ( !$articles ) {
         throw $this->createNotFoundException(
                 'Keine Artikel gefunden!');
     }

    $serializer->serialize($articles, 'json');
    return new Response(json_encode($json));
但我收到一个错误:

    A circular reference has been detected (configured limit: 1). 

要使用Angular.js,必须编写Rest API。为此,您可以使用

以及使用所需的数据序列化实体

它与FOSRestBundle兼容


作为使用这些捆绑包的示例,您可以查看我们的项目中的一个,我遇到了相同的问题,这是因为我的实体与另一个字段上的第二个实体的同一个实体相关。我只是在我的实体中创建了这个函数:

public function removeRelationsThatCauseCircularError()
{
  $this->companyEvents = NULL;
}

并在查看序列化程序之前运行该函数。

您在控制台响应中看到了什么?您还可以格式化代码吗。我只是看不懂第一部分,它太乱了。我希望它现在的格式更好,对不起,我只是从教程中复制了它。。。我在控制台中看不到任何东西,因为这个示例正在运行。我最大的问题是缺少关系数据的json响应……因为您得到的是数组结果,所以必须显式地加入相关实体。查看文档中的示例。您可能还需要查看序列化程序。并使用JsonResponse而不是Response。
public function removeRelationsThatCauseCircularError()
{
  $this->companyEvents = NULL;
}