休息 – Symfony2和单页面应用程序使用像AngularJS这样的框架

前端之家收集整理的这篇文章主要介绍了休息 – Symfony2和单页面应用程序使用像AngularJS这样的框架前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(如果这不是发布这种问题的正确的地方,我会很高兴地在其他地方发布)

我正在尝试构建一个交互式Web应用程序来管理公司资源。
我有Symfony2的经验,但我用这个新的应用程序打了墙。

我想使这个应用程序在客户端相当互动。几乎完整的单一网页应用程序。
我以前的Web应用程序通常只会使用具有CRUD页面的典型MVC模式。

在这些简单的应用程序中,我会有

/employees/
/employees/create
/employees/detail/45
/employees/update/45
/employees/delete/45

在这种应用中使用symfony会给我很多的优势:

>路由
>安全(CSRF令牌)
> FormTypes和Form处理
>验证
>与学说融合
>枝

特别是在Twig中这样的功能非常清爽(因为我的模型被构建为Doctrine实体):

<p>{{ employee.getCurrentTask().description }}</p>

我现在面临的问题是,我觉得Symfony2并不是真正为单一网页应用程序构建的。一旦我尝试添加一些Ajax功能,我遇到了这些问题:

> CSRF令牌无效
> jQuery中不可重复使用的视图/表示逻辑
>在html中添加数据属性获取id等等…

然后我看着Knockout.js和Angularjs,但是我觉得失去了教条和枝条的所有优点。我必须在客户端重建我的模型,并且必须在两个不同的位置保持它们。

所以我想出了这个想法:

>使用Symfony2模型和控制器将数据保存到数据库,但是让symfony中的控制器只发送JSON并接收JSON(FOSRestBundle可能?)
>使用像AngularJS或KnockoutJS这样的框架在客户端重建JSON数据,以使用双向绑定。

但是,如何处理问题,如Doctrine2关系,表单验证,Symfony已经解决的CSRF,但如果我使用前端js框架,则无法使用?

欢迎所有的建议!

关于JSON,序列化和模型的一些话

西蒙,我面临着同样的问题和问题。首先喜欢肯已经提到过。您不需要重建任何模型。更好地使用FosRestBundle和/或JMS Serializer。它将关系转换成JSON对象。这个对象通过api传输到你的前端,你可以像在twig一样使用它们,当你使用这样的angular.js

{[{ user.username }]}

与树枝一样。但请记住,您必须为角度设置自定义括号,因为默认情况下它使用与twig相同。

路由

你谈论一个单一的页面应用程序,所以symfony的路由保持在一个低的水平,几乎没有刷新页面。相反,您必须使用前端框架的路由,因为我只熟悉angular.js,我给出了一个有角度的例子:

app.config(function($routeProvider,$interpolateProvider) {

    //here you go,custom brackets
    $interpolateProvider.startSymbol('{[{');
    $interpolateProvider.endSymbol('}]}');

    $routeProvider.when('/user',{
        controller: UserController,templateUrl: Routing.generate('suser_list')
    }).when('/ticket',{
        controller: TicketController,templateUrl: Routing.generate('ticket_list')
    });
});

当你打了一个链接

<a href="#/ticket">Go to tickets</a>

AngularJ将知道要触发的前端控制器。很好的东西,没有页面重新加载。还可以看看FosJSRoutingBundle.它允许您在javascript中生成symfony路由,我使用它们将js控制器与数据推入的html模板进行链接

FormTypes,Form处理,验证

那么当你使用像cornerjs这样的前端框架时,你的symfony表单类型是无用的。但我不确定记住数据是通过api推送和拉出来的,我认为这对于形式类型来处理这种混杂是一件困难的事情。

对于验证,您可以使用angular的实时验证,或者在后台使用symfony的验证,没有问题。使用客户端和服务器端验证可能是一件好事。

枝条

树枝脱离了比赛。所有数据都在客户端呈现,而不是像服务器一样在服务器端渲染。但是,如果您的应用程序确实是单页应用程序,那只是这种情况。当然,你可以使用twig,但只有重新加载整个页面时才会刷新。

与教义融合

您仍然可以在后台使用原则。你有关于教义和SPA的具体问题吗?

猜你在找的Angularjs相关文章