Sim*_*mon 18 architecture rest symfony angularjs knockout.js
(如果这不是发布此类问题的正确位置,我很乐意将其发布在其他地方)
我正在尝试构建一个交互式Web应用程序来管理公司资源.我有Symfony2的经验,但是我对这个新的应用程序有点不满.
我想在客户端使这个应用程序非常互动.几乎是一个完整的单一网页应用程序.我以前的Web应用程序通常只使用CRUD页面的典型MVC模式.
在那些简单的应用程序中我会有
/employees/
/employees/create
/employees/detail/45
/employees/update/45
/employees/delete/45
Run Code Online (Sandbox Code Playgroud)
在这种应用程序中使用symfony会给我很多好处:
特别是在Twig中这样的功能非常令人耳目一新(因为我的模型是作为Doctrine实体构建的):
<p>{{ employee.getCurrentTask().description }}</p>
Run Code Online (Sandbox Code Playgroud)
我现在面临的问题是我觉得Symfony2并不是真正构建单个网页应用程序.一旦我尝试添加一些Ajax功能,我就遇到了这些问题:
然后我研究了Knockout.js和Angularjs,但后来我觉得失去了Doctrine和Twig的所有优点.无论如何,我必须在客户端重建我的模型,然后必须将它们保存在两个不同的位置.
所以我提出了这个想法:
但是接下来我将如何处理像Doctrine2关系,表单验证,CSRF这样的问题,Symfony已经解决了但是如果我使用前端js框架则无法使用它?
欢迎所有建议!
Upv*_*ote 19
关于JSON,序列化和模型的一些话
西蒙,我遇到了完全相同的问题和问题.首先像肯已经提到的那样.您无需重建任何模型.更好地使用FosRestBundle和/或JMS Serializer.它将实体与关系转换为JSON对象.这个对象通过api传递到你的前端,当你使用angular.js这样的时候,你可以像在树枝一样使用它们
{[{ user.username }]}
Run Code Online (Sandbox Code Playgroud)
和树枝一样.但请记住,您必须为角度设置自定义括号,因为默认情况下它与树枝使用相同.
路由
您谈到单页应用程序,因此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')
});
});
Run Code Online (Sandbox Code Playgroud)
当你点击链接时
<a href="#/ticket">Go to tickets</a>
Run Code Online (Sandbox Code Playgroud)
AngularJs将知道触发哪个前端控制器.非常好的东西,没有页面重新加载.还可以看看FosJSRoutingBundle.它允许你在javascript中生成symfony路由,我用它们来链接js控制器和推送数据的html模板.
FormTypes,表单处理,验证
好吧,当你使用像angularjs这样的前端框架时,你的symfony表单类型就没用了.但我不确定.记住数据是通过api作为json推送和拉出的,我认为这对表单类型来说是一项艰巨的工作来处理这种复杂性.
对于验证,您可以使用angular的实时验证或在后端进行symfony验证,没问题.使用客户端和服务器端验证可能是一件好事.
枝条
Twig退出了比赛.所有数据都在客户端呈现,而不是像在twig上那样预先在服务器端呈现.但只有当您的应用程序真的是单页面应用程序时才会出现这种情况.当然你可以使用twig,但只有在重新加载整个页面时它才会刷新.
与Doctrine整合
你仍然可以在后端使用教义.您对学说和SPA有特定的问题吗?
| 归档时间: |
|
| 查看次数: |
8083 次 |
| 最近记录: |