用于Ajax的Symfony和AngularJS:Angular-ify Symfony或Symfony-ify Angular?

时间:2015-08-09 19:40:58

标签: ajax angularjs symfony

说到Ajax,它看起来像Symfony(第2.7节)和AngularJS(第1.4节)并不能很好地融合在一起; - )

我认为有两种方法可以让他们合作 - 我的问题是:哪一种更好?

  1. 调整AngularJS以与Symfony兼容
  2. 调整Symfony以与AngularJS兼容
  3. 对于1,这是我发现的最佳指令: http://harmssite.com/2014/09/mixing-angular-and-symfony/

    优势:可以在Symfony中使用$form->handleRequest($request);一次获取所有表单字段。

    缺点:无法为value设置默认<input>&s,导致AngularJS覆盖它们。解决方案:

    1. 将其设置在Angular的控制器中(即在app.js中)。但是如果值来自数据库(即Symfony),你怎么能把它变成app.js?通过Symfony的模板系统渲染整个app.js文件? =&GT;看起来对我来说太过分了。
    2. 使用ng-init将其设置在HTML / twig文件中,如下所示: AngularJS - Value attribute on an input text box is ignored when there is a ng-model used? =&GT;这是解决方法而非解决方案; - )
    3. 对于2,主要的缺点是你需要使用$post = $this->getRequest()->getContent();分别将每个表单字段读入Symfony,如下所示: AngularsJS POST JSON data to Symfony2
      我没有尝试过这种方法,所以我不知道是否还有其他问题; - )

2 个答案:

答案 0 :(得分:0)

在摆弄了一段时间之后,我终于找到了解决方案:彻底击出AngularJS!

据我所知,如果您在客户端完全处理表单(或至少主要是),AngularJS只是要走的路。我想,这就是他们所说的单页应用程序(SPA)&#34;。

如果您正在使用Symfony进行表单处理,AngularJS可能会让您的生活变得更加困难,而不是更容易。

我现在使用普通的jQuery for JavaScript,一切都像魅力(包括Ajax),比AngularJS更加轻松。

答案 1 :(得分:0)

如果您只需要使用经典表单(没有Symfony2表单构建器)处理从AngularJS到Symfony2服务器的AJAX请求,您可以使用此包:

qandidate/symfony-json-request-transformer

在composer.json中将其添加为依赖项,并以与经典请求相同的方式处理您的请求(POST和其他方法)。

您可以查看有关此问题的帖子:Handling HTTP Requests from AngularJS to Symfony2

其他提示,要在您的树枝模板中使用AngularJS,请在角度应用中添加:

var app = angular.module('yourApp', [],
function($interpolateProvider){
    $interpolateProvider.startSymbol('<%');
    $interpolateProvider.endSymbol('%>');
});

这会将您的起始符号从{{更改为<%,并将结束符号从}}更改为%>

在我的情况下,使用AngularJS可以让我的工作更轻松,更有效率,特别是与Symfony后端相结合,但它非常个性化,取决于使用角度的原因/方式。