当前位置: 首页 > 面试题库 >

使用诸如AngularJS之类的Symfony2和单个网页应用程序

公西培
2023-03-14
问题内容

(如果这不是发布此类问题的正确位置,我会很乐意将其发布到其他地方)

我正在尝试构建一个交互式Web应用程序来管理公司资源。我有Symfony2的经验,但是我对这个新应用程序有点不满意。

我想使该应用程序在客户端上具有很大的交互性。几乎是一个完整的网页应用程序。我以前的Web应用程序通常只对CRUD页面使用典型的MVC模式。

在那些简单的应用程序中,我将拥有

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

在这种应用程序中使用symfony将给我带来很多好处:

  • 路由
  • 安全性(CSRF令牌)
  • FormTypes和表单处理
  • 验证方式
  • 与学说的整合
  • 枝条

特别是在Twig中,这样的功能非常令人耳目一新( 因为我的模型是作为Doctrine实体构建的 ):

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

我现在面临的问题是,我觉得Symfony2并不是真正针对单个网页应用程序构建的。 一旦尝试添加一些Ajax功能,我就会遇到以下问题

  • CSRF令牌无效
  • jQuery中太多不可重用的视图/表示逻辑
  • 在html中添加数据属性以获取ID等…

然后,我研究了Knockout.js和Angularjs,但随后我却感觉丧失了Doctrine和Twig的所有优势。无论如何,我必须在客户端重建模型,然后将其维护在两个不同的位置。

所以我想出了这个主意:

  • 使用Symfony2模型和控制器将数据持久化到数据库中,但让symfony中的控制器仅发送JSON并接收JSON(也许是FOSRestBundle?)
  • 使用AngularJS或KnockoutJS之类的框架在客户端重建JSON数据以使用2向绑定。

但是,我该如何解决Symfony已经解决但无法使用Doctrine2 Relationships,Form
Validation,CSRF等问题,但是如果使用前端js框架则无法使用?

欢迎提出所有建议!


问题答案:

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

西蒙,我面临着完全相同的问题。首先像肯已经提到过的。您不需要重建任何模型。最好使用FosRestBundle和/或JMS序列化器。它将具有关系的实体转换为JSON对象。该对象通过api传输到您的前端,当您像这样使用angular.js时,您可以像在树枝中一样使用它们

{[{ user.username }]}

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

路由

您谈论的是单页面应用程序,因此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>

AngularJs将知道要触发哪个前端控制器。非常棒的东西,无需重新加载页面。还可以看看
FosJSRoutingBundle

。它允许您使用javascript生成symfony路由,我使用它们将js控制器与html模板(将数据推入其中)链接在一起。

FormTypes,表单处理,验证

好吧,当您使用诸如angularjs之类的前端框架时,您的symfony表单类型几乎没有用。但是我不确定。请记住,数据是通过api作为json推入和拉出的,我认为这对于表单类型来处理这种共性将是一项艰巨的工作。

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

枝条

特格(Twig)不参加比赛。所有数据都是在客户端渲染的,而不是像树枝一样在服务器端渲染的。但是只有在您的应用程序实际上是单页应用程序的情况下,才是这种情况。当然可以使用树枝,但只有重新加载整个页面后它才会刷新。

与学说的整合

您仍然可以在后端使用主义。您有关于教义和SPA的特定问题吗?



 类似资料:
  • 问题内容: 当我学到角度时,有两个问题困扰着我: 当用户刷新页面或点击后退按钮时,如何恢复状态? 如何在属于不同控制器的合并范围之间共享数据? 下面我展示了一个使用客户端会话存储的简单解决方案。在用户刷新页面或点击后退按钮后,它既允许共享公共数据,又可以自动恢复状态。 注意:事实证明,以下解决方案对于回答以下问题至关重要: 如何获得“后退”按钮以与AngularJSui路由器状态机一起使用? 问题

  • 我在Symfony2中有REST API,在AngularJS中有客户端应用。我有用户,用户有Symfony2角色(ROLE_ADMIN,ROLE_USER)。 在security.yml是部分,但在这里我只能设置Symfony2路由路径。 如何阻止对路径的访问,例如: 对于角色为_USER或匿名的用户? (#/某物-是Angular url)

  • 问题内容: 我有一个使用angularJS的单页Web应用程序。我需要打印某个页面的div。我尝试了以下方法: 该页面包含少量div(print.html) 控制器具有以下脚本: 此代码可打印所需的div,但存在问题。该语句代替了整个应用程序的主体,因为它是SPA。因此,当我刷新页面或再次单击“打印”按钮时,页面的全部内容将被删除。 问题答案:

  • 问题内容: 我们站在哪里 我们正在努力实现网络可访问性,以便遵守某些规范公共/教育机构的法律。到目前为止,我们一直在确保: 我们的布局在逻辑上是有序的; 图片有标签。但很快就知道我们需要采取行动,并认真考虑一下。 我们在考虑什么 我们一直在寻找动态Web应用程序的框架,但担心它对我们的可访问性地位可能意味着什么。 我知道没有JavaScript的浏览器很可能会破坏高度动态的Angular应用程序(

  • 本文向大家介绍AngularJS教程之简单应用程序示例,包括了AngularJS教程之简单应用程序示例的使用技巧和注意事项,需要的朋友参考一下 按以下步骤来创建AngularJS应用  第1步:加载框架 作为一个纯粹的JavaScript框架,它可以使用<script>标签来添加。 第2步:使用ng-app指令定义AngularJS应用 第3步:用 ng-model指令定义的模式名称 <p>Ent

  • 问题内容: 我想知道如何在单个页面应用程序中使用多个控制器。我试图找出答案,但发现的问题与我的非常相似,但是有很多不同的答案可以解决一个特定的问题,最终您不会在单个页面应用程序中使用多个控制器。 那是因为在单个页面上使用多个控制器并不明智吗?还是只是不可能? 假设我已经在主页上有一个踢屁股图像轮播控制器,但是随后我学习了如何(比如说)使用模态,为此我还需要一个新的控制器(或者其他我需要控制器的东西