Symfony2 + AngularJS
Symfony2 + AngularJS
我一直在使用 symfony2 开发网络应用程序,现在我添加了一些 Angularjs。
我有一个输入字段,您可以在其中按名称过滤产品,问题如下,我在 php 中有一个控制器,我做了一些查询,然后渲染视图,通过参数,在这种情况下我做这样的事情,
.......
return $this->render('default/index.html.twig',array( 'products' => $products));
我的问题是,如果我想使用 angular 按名称过滤这些产品,我该如何实现? (我想要官方 angular 教程中的 phonecat-app 之类的东西,您可以在其中按名称过滤)
到目前为止,我已经这样做了:
var StoreApp = angular.module('StoreApp', []);
StoreApp.controller('StoreCtrl', function($scope,$http){
$http.get('http://localhost:8000').success(function(data){
$scope.stores = data;
});
});
问题是我不知道在 GET 参数中输入哪个 URL,我在数据库中有几个表,但我不知道如何处理它们。
我在端口 8000 和 Doctrine 上使用本地 Web 服务器。
为了使用 angular 在客户端过滤数据,您需要使用 javascript.[=13 将 symfony2 应用程序中的数据放入 angular 范围=]
有多种方法可以做到这一点,快速而肮脏的方法是直接在 angular ng-init 属性中从 php 呈现产品数组,如 中所述.
在我看来,将数据导入您的 angular 应用程序的最佳方法是创建一个 "RESTful endpoint" 以 JSON 格式向您的 angular 公开您的产品数据应用。使用 symfony2,如果您使用类似于此代码段的控制器查询 http://localhost:8000/products,则可以创建一个 returns 产品数据的控制器:
class ProductController
{
public function getProductsAction()
{
$products = $this->getRepository('Products')->findAll(),
return new JsonResponse($products);
}
}
终于解决了问题
这是我的控制器,
public function getAllStoresAction()
{
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery('SELECT s FROM AppBundle\Entity\Store s');
$result = $query->getArrayResult();
return new Response(json_encode($result), 200);
}
然后我的app.js
var storeApp = angular.module('storeApp', []).config(function($interpolateProvider){
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
});
storeApp.controller('StoreCtrl',function($scope,$http){
$http.get('/get-all-stores').success(function(data){
$scope.stores = data;
});
$scope.orderProp = 'name';
});
和我的 routing.yml
get_all_stores:
path: /get-all-stores
defaults: { _controller: AppBundle:Default:getAllStores}
我设法取回了数据,但问题是它返回了一个空数组。
搜索了一下,我发现我没有序列化数据,php 不会自动执行,所以我使用了这个 getArrayResult();而且效果很好!
感谢 Peter Peerdeman 的帮助
我一直在使用 symfony2 开发网络应用程序,现在我添加了一些 Angularjs。
我有一个输入字段,您可以在其中按名称过滤产品,问题如下,我在 php 中有一个控制器,我做了一些查询,然后渲染视图,通过参数,在这种情况下我做这样的事情,
.......
return $this->render('default/index.html.twig',array( 'products' => $products));
我的问题是,如果我想使用 angular 按名称过滤这些产品,我该如何实现? (我想要官方 angular 教程中的 phonecat-app 之类的东西,您可以在其中按名称过滤) 到目前为止,我已经这样做了:
var StoreApp = angular.module('StoreApp', []);
StoreApp.controller('StoreCtrl', function($scope,$http){
$http.get('http://localhost:8000').success(function(data){
$scope.stores = data;
});
});
问题是我不知道在 GET 参数中输入哪个 URL,我在数据库中有几个表,但我不知道如何处理它们。 我在端口 8000 和 Doctrine 上使用本地 Web 服务器。
为了使用 angular 在客户端过滤数据,您需要使用 javascript.[=13 将 symfony2 应用程序中的数据放入 angular 范围=]
有多种方法可以做到这一点,快速而肮脏的方法是直接在 angular ng-init 属性中从 php 呈现产品数组,如 中所述.
在我看来,将数据导入您的 angular 应用程序的最佳方法是创建一个 "RESTful endpoint" 以 JSON 格式向您的 angular 公开您的产品数据应用。使用 symfony2,如果您使用类似于此代码段的控制器查询 http://localhost:8000/products,则可以创建一个 returns 产品数据的控制器:
class ProductController
{
public function getProductsAction()
{
$products = $this->getRepository('Products')->findAll(),
return new JsonResponse($products);
}
}
终于解决了问题
这是我的控制器,
public function getAllStoresAction()
{
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery('SELECT s FROM AppBundle\Entity\Store s');
$result = $query->getArrayResult();
return new Response(json_encode($result), 200);
}
然后我的app.js
var storeApp = angular.module('storeApp', []).config(function($interpolateProvider){
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
});
storeApp.controller('StoreCtrl',function($scope,$http){
$http.get('/get-all-stores').success(function(data){
$scope.stores = data;
});
$scope.orderProp = 'name';
});
和我的 routing.yml
get_all_stores:
path: /get-all-stores
defaults: { _controller: AppBundle:Default:getAllStores}
我设法取回了数据,但问题是它返回了一个空数组。 搜索了一下,我发现我没有序列化数据,php 不会自动执行,所以我使用了这个 getArrayResult();而且效果很好!
感谢 Peter Peerdeman 的帮助