在Symfony2项目中可以使用require.js和异步模块定义(AMD)

Using require.js and Asynchronous Module Definition (AMD) possible in a Symfony2 project?

本文关键字:模块 异步 定义 AMD js 项目 Symfony2 可以使 require      更新时间:2023-09-26

我目前正在对我的工作流程进行现代化改造,尤其是在前端部分,并在我上一个不需要后端的项目中开始使用require.js,qunit,backbone.js,underscore.js等。

来自Symfony2,我习惯于通常用Twig编写我的模板,并让Assetic制作所有必要的魔法,如js/css缩小,资产等。 研究表明,Assetic目前无法按照需要的方式提供javascript文件.js需要它们。

现在我真的很喜欢RequireJS,异步模块定义(AMD)背后的想法,并且想知道如何在Symfony2项目中从它的出色功能中受益。恕我直言,最明智的方法是减少 Symfony2 项目,以简单地提供必要的数据,例如通过提供 RESTful 接口。这将进一步导致一个完整的解耦的前端<>后端,可以更独立地开发和测试。

我的问题是:我不会失去Symfony2给我的一些好处,比如完整的表单处理(CSRF保护,验证等)和安全性吗?有没有人已经这样做了,并且能够分享一些见解?是否有一些缺点/陷阱需要寻找?和。。。值得吗?;-)

在我的主树枝模板中,我定义了(例如 {% block js %})像这样的 JavaScript 部分

<script type="text/javascript">
var config = {
    getCoreBundleName: function() {
        return 'openframeworkcore';
    },
    getPath: function(bundleName, filePath) {
        return bundleName + '/components/' + filePath;
    },
    getCorePath: function(filePath) {
        return this.getPath(this.getCoreBundleName(), filePath);
    }
};
require.config({
    baseUrl: '{{ app.request.getBasePath() }}/bundles/',
    paths: {
        core: 'openframeworkcore/core/js/core',
        bootstrap: config.getCorePath('bootstrap/dist/js/bootstrap')
    },
    shim: {
        bootstrap: {
            deps: ['jquery']
        },
        fancybox: {
            deps: ['jquery', 'jquery-mousewheel']
        },
        angular: {
            exports: 'angular'
        },
        restangular: {
            deps: ['underscore', 'angular']
        },
        'jquery-ui': {
            deps: ['jquery']
        }
    }
});
// loads the core.js
require(['core']);
</script>

我的情况我使用了 restangular。一个使用 rest 方法扩展 angularjs 的框架。但它只提供了一些辅助方法来交流休息。

另一方面,您可以与Symfony2完美地工作

/**
 * @Route("/create")
 * @Method({"GET"})
 * @Template()
 */
public function createAction(Request $request)
{
    $entityManager = $this->getDoctrine()->getManager();
    $form = $this->createForm(new BoardType());
    return array(
        'form' => $form->createView()
    );
}

我已经将requirejs与Symfony2结合起来了如需进一步的问题,请随时问我。

干杯

我们目前正在基于我们自己的RESTful框架重写我们的内部网应用程序,该框架使用Twig和jQuery,因为我们对现有框架(如Slim,Tonic和Recess)的各个方面感到失望。

我们发现,集成声明式表单字段验证(负责一类 HTTP 资源的每个 PHP 类声明哪些表单字段具有哪些验证要求,REST 框架在接收的数据中强制执行这些要求)和本机 JSON-HAL 导出(我们的 PHP 对象是 HAL 格式的,HAL 导出只是一个json_encode()调用)之类的东西是相当简单的。

在REST框架中投入了大约一个工月的开发(包括评估其他框架)。您是否认为"值得"取决于系统对您的业务的重要性:-)

你也可以

使用Hearsay''RequireJSBundle。它将Require.js与Assetic集成在一起,并允许您使用Symfony2配置系统配置Require.js。