symfony2应用程序上的Angularjs

Lou*_*let 73 symfony angularjs

我正在开发一个在前端使用大量javascript的SF2应用程序.

SF2为我提供了一个很好的方法来构建一个漂亮的REST应用程序,使用doctrine管理我的数据库,使用twig进行模板等等,但我想使用Angularjs.

我知道angularjs SF2是2个不同的框架,有不同的方法,但我想知道这项工作的最佳方法是什么.

它甚至值得吗?

如果是,您认为更清洁,最有效的解决方案是什么?

也许使用php代替twig模板使用angularjs花括号?

Hal*_*oum 64

我认为Symfony2可以很好地配合AngularJS.证据是我使用Symfony在一侧创建API,在另一侧使用AnglularJS创建一个Web应用程序.

此外,由于某些原因,我在我的网络应用程序中生成我的观点Twig.{% verbatim %} {% endverbatim %}每次我需要在视图中使用Angular时,我只需在角色的语句中嵌入angular的花括号.

  • 你也可以为你的应用程序更改angularjs的插值标签 (9认同)

acm*_*cme 26

从Twig 1.12开始,原始标记被重命名为逐字:

{% verbatim %}
    <ul>
    {% for item in seq %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
{% endverbatim %}
Run Code Online (Sandbox Code Playgroud)

介于两者之间的所有内容都不会被Twig引擎解析,并且可以由AngularJS使用.

虽然我建议更改AngularJS分隔符.否则,在查看模板时很难区分Twig和AngularJS代码.


小智 17

我面临同样的情况,在我的情况下,我决定拆分客户端和服务器项目,我使用symfony2作为服务器端,因为除了其他优点之外,它还具有简单性和可用性.另一方面,我使用AngularJS创建了一个简单的HTML项目,这对我很有用,因为我想创建一个具有相同客户端文件的HTML5移动应用程序.

在这种情况下,我认为问题的核心在于身份验证和授权过程.您必须在服务器端实现用于在REST中工作的安全防火墙(例如WSSE:Symfony2:如何创建自定义身份验证提供程序).

然后在客户端(AngularJS)中相应的实现,我找到的最有用的资源: Github:witoldsz/angular-http-auth.

如果您希望使用sf2项目更深入地实现,可以使用Assetic的过滤器编译AngularJS,并在页面加载中获得性能.


gcm*_*105 13

我使用以下代码更改AngularJS delmiters

CoffeeScript的:

# Change the angular delimiters for twig compatability
# and load module with ngResource
WAFapp2 = angular.module("WAFapp2", ['ngResource'], ($interpolateProvider) ->
  $interpolateProvider.startSymbol "{[{"
  $interpolateProvider.endSymbol "}]}"
)    var WAFapp2;
Run Code Online (Sandbox Code Playgroud)

或者Javascript:

var WAFapp2;

WAFapp2 = angular.module("WAFapp2", ['ngResource'], function($interpolateProvider) {
  $interpolateProvider.startSymbol("{[{");
  return $interpolateProvider.endSymbol("}]}");
});
Run Code Online (Sandbox Code Playgroud)

然后在我的布局的顶部:

<!DOCTYPE html>
<html lang="en" data-ng-app="WAFapp2">
  <head>
Run Code Online (Sandbox Code Playgroud)

然后在我可以使用的html的body标签部分:

<ul>
{% for item in seq %}
    <li>{[{ item }]}</li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)

我认为这样可以保持清洁,并且可以轻松混合树枝和角度标签.这似乎对我有用.


pab*_*oRN 11

避免混淆的两个必须的一个很好的解决方案是基于属性的指令ng-bind:<p ng-bind="yourText"></p>与...相同<p>{{yourText}}</p>


ken*_*ken 11

保持角度应用程序分离是更可取的.只需使用Symfony作为数据检索/持久性的api和安全提供程序.

这将允许更大的视图和数据层分离.因此,您可以在不考虑后端实现的情况下开始在前端工作.你只需要模拟api调用.


Dav*_*Lin 8

我一直在尝试使用Symfony和angularjs构建单页面应用程序.我使用Symfony2和FOSRestBundle来构建Restful API和Angularjs来构建前端.

就其本身而言,AngularJs不需要Symfony2框架来构建应用程序,只要它具有可与之通信的API.但是,我发现Symfony2在这些领域很有用:

  1. 在模板中翻译.在大多数情况下,API有效负载中的数据不需要转换.使用Symfony I18N支持模板非常有意义.

  2. 加载选项列表.假设您有一个包含200多个选项的国家/地区列表.您可以构建一个API来填充angularjs中的动态下拉列表,但由于这些选项是静态的,您只需在twig中构建该列表即可.

  3. 预加载数据/内容.如果您愿意,可以在托管页面中预加载模板或JSON数据

  4. 利用Symfony的身份验证功能.您也可以使用与应用程序的API相同的经过身份验证的会话.不需要使用Oauth.

  5. Assetic包非常有用,可以简化和缩小AngularJs使用的一串Javascript文件

但是,我确实发现了以下挑战:

  1. 多个Ajax调用的PHP会话锁定.需要一种更好的方法来通过调用'session_write_close()'或使用数据库进行会话来释放php会话.在Symfony中调用'session_write_close'函数的最佳位置在哪里,以便我们可以尽快释放会话以获得更多ajax调用?

  2. 重新加载/同步加载的数据假设您有一个在浏览器中显示的项目列表(如ebay项目),您希望在服务器端更新列表时在客户端的浏览器中更新该列表.您可能需要定期轮询列表或使用类似Firebase的内容.Firebase在大多数情况下都是一种矫枉过正,对我来说轮询并不好看,但实现这一目标的最佳方法是什么?

请添加评论.谢谢

  • __对于你的第二个挑战,`websocket`是要走的路.__我知道你已经发帖已经差不多两年了,但是我想评论某人未来的参考. (2认同)