(如果这里不是发布此类问题的合适位置,我很乐意在其他地方发布)
我正在尝试构建一个交互式web应用程序来管理公司资源。我有使用Symfony2的经验,但是我对这个新的应用程序有点碰壁。
我想让这个应用程序在客户端具有很强的交互性。几乎是一个完整的网页应用程序。我以前的web应用程序通常只使用带有CRUD页面的典型MVC模式。
在这些简单的应用程序中,我会使用
/employees/
/employees/create
/employees/detail/45
/employees/update/45
/employees/delete/45
在这类应用程序中使用symfony会给我带来很多好处:
的Form handling
特别是Twig中这样的功能非常令人耳目一新(因为我的模型是作为Doctrine实体构建的):
<p>{{ employee.getCurrentTask().description }}</p>
我现在面临的问题是,我觉得Symfony2并不是真正为单网页应用程序构建的。当我尝试添加一些Ajax功能时,我就遇到了这些问题
jQuery
然后我研究了Knockout.js和Angularjs,但后来我觉得失去了Doctrine和Twig的所有优势。无论如何,我必须在客户端重新构建模型,并且必须在两个不同的位置维护它们。
所以我想出了这个主意:
但是,如果我使用前端js框架,我该如何处理Doctrine2关系、表单验证、CSRF等问题呢?如果我使用前端js框架,Symfony已经解决了这些问题,但这些问题却无法使用。
欢迎所有的建议!
发布于 2013-04-26 16:02:35
关于JSON、序列化和模型的一些话
西蒙,我遇到了完全一样的问题。首先,就像ken已经提到的。您不需要重新构建任何模型。最好使用FosRestBundle和/或JMS序列化程序。它将具有关系的实体转换为JSON对象。这些对象通过api传输到您的前端,当您像这样使用angular.js时,您可以像在twig中一样使用它们。
{[{ user.username }]}
与树枝中的相同。但请记住,您必须为angular设置自定义括号,因为在默认情况下,它使用与twig相同的括号。
路由
您谈到的是单页面应用程序,因此symfony的路由被保持在较低的级别,以进行较少的页面刷新。相反,你必须使用你的前端框架的路由,因为我只熟悉angular.js,所以我给出一个angular示例:
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>
AngularJs将知道触发哪个前端控制器。非常棒的东西,不需要重新加载页面。也可以看看。它允许你在javascript中生成symfony路由,我用它们来链接js控制器和html模板,在那里数据被推入。
FormTypes,表单处理,Validation
好吧,当你使用像angularjs这样的前端框架时,你的symfony表单类型是非常无用的。但我不确定。请记住,数据是通过api作为json进行推送和拉取的,我认为对于表单类型来说,要处理这种复杂性将是一项艰巨的工作。
对于验证,你可以使用angular的实时验证,或者在后端使用symfony的验证,没有问题。同时使用客户端和服务器端验证可能是一件好事。
Twig
小枝出局了。所有数据都是在客户端呈现的,而不是像twig那样预先呈现在服务器端。但是,只有当您的应用程序是真正的单页面应用程序时才会出现这种情况。当然,您可以使用twig,但只有在重新加载整个页面时,它才会刷新。
与Doctrine的集成
你仍然可以在后端使用规则。您有关于原理和SPA的具体问题吗?
发布于 2013-04-11 07:20:45
你不需要在客户端重建模型。我通常只在angularjs中创建一个提供json数据的服务。数据操作仍然发生在使用ajax的服务器端。
对于需要csrf的表单,我通常只通过json发送twig呈现的html。或者,您可以使用jms序列化程序序列化$form->createView()。但是,您需要一些客户端脚本来将json数据转换为实际的表单控件。
https://stackoverflow.com/questions/15922531
复制相似问题