2015-02-05 109 views
0

我一直在開發一個使用symfony2的web應用程序,現在我添加了一些angularjs。 我有一個輸入字段,在那裏你可以按名稱過濾產品,問題是以下,我有一個控制器在PHP中,我做了一些查詢,然後我渲染視圖,傳遞參數,在這種情況下,我做這樣的事情,Symfony2 + AngularJS

....... 
return $this->render('default/index.html.twig',array('products' => $products)); 

米的問題是,如果我想通過角度過濾這些產品的名稱,我怎麼能做到這一點? (我想要的東西就像在官方角度教程,在那裏你可以通過名稱過濾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參數中,我在數據庫中有幾個表,我不知道如何解決它們。 我在端口8000和Doctrine上使用本地Web服務器。

希望有人可以幫助 謝謝!

回答

0

最後,我可以解決這個問題。

這裏是我的控制器,

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

0

爲了使用角度過濾客戶端上的數據,您需要將symfony2應用程序中的數據轉換爲帶有javascript的角度範圍。

這樣做有很多種方法,快速和骯髒的方法是直接在角度ng-init屬性中顯示來自php的產品數組,如https://stackoverflow.com/a/28508012/1016372中所述。

在我看來,將數據導入角度應用程序的最佳方法是創建一個「RESTful端點」,以JSON格式將您的產品數據公開給角度應用程序。使用Symfony2的,如果你犯了一個查詢http://localhost:8000/products類似於這個片段控制器,你可以創建一個控制器返回的產品數據:

class ProductController 
{ 
    public function getProductsAction() 
    { 
     $products = $this->getRepository('Products')->findAll(), 
     return new JsonResponse($products); 
    } 
}