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