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 的帮助