我正在尝试使用Symfony2,Doctrine和Angujarjs。 Symfony2或Doctrine没有问题但是我在使用带有angularjs的ajax请求时遇到了问题。要么它没有加载任何东西,我在加载json(json来自Symfony及其工作)时确实犯了错误,或者它是否有效,但json不包含任何关系& #39; s数据。
那么,正确的方法是什么 答:使用关系数据(例如文章和类别)为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;
};
});
这是我的symfony2功能
public function jsonallarticlesAction() {
$articles = $this->getDoctrine()
->getRepository('AcmeBlogBundle:Articles');
if ( !$articles ) {
throw $this->createNotFoundException(
'Keine Beiträge gefunden!');
}
$queryArticles = $articles->createQueryBuilder('a')
->where('a.status = :status')
->setParameter('status', 0)
->orderBy('a.createdDate', 'DESC')
->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);;
$articles = array_values($queryArticles);
$response = new Response();
$response->setContent(json_encode($articles));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
EDITED CONTROLLER
我尝试使用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).
答案 0 :(得分:2)
对于使用Angular.js,您必须编写Rest API。为此,您可以使用https://github.com/FriendsOfSymfony/FOSRestBundle
要使用所需数据序列化您的实体,请使用http://jmsyst.com/bundles/JMSSerializerBundle
与FOSRestBundle兼容。
作为使用这些捆绑包的示例,您可以查看我们的项目https://github.com/stfalcon-studio/lost-and-found
答案 1 :(得分:0)
我遇到了同样的问题,这是因为我的实体与另一个领域的第二个实体的相同实体有关。我只是在我的实体中创建了这个函数:
public function removeRelationsThatCauseCircularError()
{
$this->companyEvents = NULL;
}
在通过序列化程序之前运行该函数。