2015-06-09 105 views
1

我试图与Symfony2中和AngularJs一起工作,但我不能,路由问题AngularJS和Symfony的

  1. 我有冲突与rounting
  2. 角不承认在树枝的角符号模板。

这是我app.js是在AppBundle/Resoures/public/js/app.js

var app = angular.module('uifi',[]); 

app.config(['$stateProvider','$interpolateProvider', 
    function($stateProvider,$interpolateProvider){ 
    $interpolateProvider.startSymbol('[[').endSymbol(']]'); 

    $stateProvider.state('grupos', { 
     url: '/grupos', 
     templateUrl: Routing.generate('app_grupos_index'), 
     controller : 'GruposController' 
    }); 
}]); 

这是我的网页index.html.twig具有虚拟内容

<html ng-app="uifi"> 

<body> 

    <script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script> 
    <script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script> 

    <script src="{{ asset('js/angular.min.js') }}"></script> 
    <script src="{{ asset('bundles/app/js/app.js') }}"></script> 
    <script src="{{ asset('bundles/app/js/controllers/GrupoController.js') }}"></script> 

    <div ng-controller="GruposController"> 
     [[title]] 
    </div> 
</body> 
</html> 

这是我Angular controller来设置title变量

app.controller('GruposController',['$scope', 
    function($scope){ 
     $scope.title ='Research groups'; 
    } 
]); 

然后我在symfony控制器来处理,我使用FOSJsRoutingBundle暴露symfony的路由app_grupos_index

class GruposController extends Controller{ 

    /** 
    * @Route(name="app_list_grupos",options={"expose"=true}) 
    */ 
    public function getListGrupos(){ 
    $grupos = $this->get('uifi.integrantes.grupos')->getGrupos(); 
    return new JsonResponse(array('grupos'=> $grupos)); 
    } 

    /** 
    * @Route(name="app_grupos_index",options={"expose"=true}) 
    */ 
    public function indexAction(){ 
    return $this->render('AppBundle:Grupos:index.html.twig'); 
    } 
} 

注到Javascript

问题:

  1. 如果我去到浏览器中的路由http://localhost:8000/grupos我得到以下Symfony error

    No route found for "GET /grupos"

    这个问题让我想起在角度不与路由

  2. 工作。如果我修改Symfony controller来处理这样的路线/grupos

/** 
    * @Route("/grupos",name="app_grupos_index",options={"expose"=true}) 
    */ 
    public function indexAction(){ 
    return $this->render('AppBundle:Grupos:index.html.twig'); 
    } 

我使用明确的[[title]]字符串和以下:

Error: [$injector:modulerr] http://errors.angularjs.org/1.3.14/$injector 
/modulerr?p0=uifi&p1=%5B%24injector%3Amodulerr%5D%20http%3A%2F 
%2Ferrors.angularjs.org%2F1.3.14%2F%24injector%2Fmodulerr%3Fp0%3DngRoute%26p1.... 

所以,我想知道我做错了什么?

+0

如果我去到'http:// localhost:8000 /#grupos'我有一条处理所有事情的路线进入'http:// localhost:8000 /'重定向到'http:// localhost:8000/login',然后我进入'http:// localhost:8000/login':/ –

+1

嗯,首先你应该可能包括ui路由器JS文件并将“ui.router”添加到模块的依赖关系中 – Phil

+0

谢谢你解决我的错误:D –

回答

0

当将symfony与angular整合时,还有很多事情需要考虑。

  1. 路由应该在客户端完全处理。 Symfony应该只呈现初始索引路由。如果你使用服务器端渲染,这里没有角度。
  2. 后端应该充当API提供商,以及前端应采取相应的行动
  3. 认证,授权 - 几个可能的原因至少

    • WSSE - 无状态的,基于令牌
    • 基于cookie - 你会需要有自定义身份验证处理程序和注销成功处理程序来发送JSON响应
  4. 使用verbatim标签比自定义插入符号角度 - 它可能会打破第三方插件或指令。

两个例子

  1. https://github.com/thujeevan/sad - 使用基于cookie认证
  2. https://github.com/FlyersWeb/angular-symfony - 使用基于WSSE认证

希望,你会赶上的事情了