Symfony2:如何在包之间共享 js 库和 css

Posted

技术标签:

【中文标题】Symfony2:如何在包之间共享 js 库和 css【英文标题】:Symfony2: How to share js libs and css between bundles 【发布时间】:2012-06-26 21:35:05 【问题描述】:

我有不同的捆绑包:MainBundle(主页)、SecurityBundle(登录、注册)、MessageBundle(消息系统)、ShopBundle。

我也遵循三阶段布局架构(::base.html.twig、AcmeMainBundle::layout.html.twig、AcmeMainBundle:Default:index.html.twig)。

但我在通过应用程序(例如 jquery)共享通用 js 库和定义 base.css(设置一些基类、背景、字体等)时遇到问题

那么在不失去资产支持的情况下使用共享 css 和 js 的最佳方法是什么?

一个想法是创建一个包含所有全局 js 和 css 以及一些布局文件的 CommonBundle,但我认为这不是处理这个问题的最佳方式...

【问题讨论】:

【参考方案1】:

如果您想在所有捆绑包之间共享公共资产,最好的选择是将它们放在app/Resources/public 目录中。例如:

app/Resources/Public
|-- css
|   `-- base.css
|-- js
|   `-- jquery.js

然后您可以在布局中引用它们,如下所示:

% block stylesheets %
  % stylesheets '../app/Resources/public/css/*' %
    <link rel="stylesheet" type="text/css" charset="UTF-8" media="all" href=" asset_url "/>
  % endstylesheets %
% endblock %

% block javascripts %
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  % javascripts '../app/Resources/public/js/*' %
    <script type="text/javascript" src=" asset_url "></script>
  % endjavascripts %
% endblock %

备注:如您所见,对于像 jQuery 这样的常用库,最好的选择仍然是使用 Google 托管的常用缓存版本。这种做法可以加快您的应用程序响应时间。

【讨论】:

我找到了一种更好的方法:您可以在 config.yml 的资产部分定义自己的库,其中包含您的库和依赖项。这些可以通过快捷方式轻松加载。详情见这里:***.com/questions/10830129/… 这就是你喜欢的学校。您找到的解决方案将资产路径的详细信息隐藏到 config.yml 中,我建议的解决方案将此类详细信息直接嵌入到 Twig 模板中。 确实!我仍然在 css 文件中提供 app/Resources/public/img 中的背景图像。我用过 css rewrite 但assetic似乎不知道你可以将图像存储在基本目录中 在尝试了各种方法(使用网络目录,此处建议的方法并创建设计包)后,我认为创建设计包是最好的答案【参考方案2】:

使用最新版本的 Symfony (2.5) 我发现 fsenart 的响应在我的情况下不起作用。 相反,我将包含共享内容的公共文件夹放入 web 文件夹:

web/public
  --js
  --css

然后在主布局中使用它,下面的代码可以工作:

% block javascripts %
    % javascripts 'public/js/*' %
        <script type="text/javascript" src=" asset_url "></script>
    % endjavascripts %
% endblock %

但要使其正常工作,不要忘记在子布局中使用 javascript 块时调用 Twig parent() 函数。

【讨论】:

以上是关于Symfony2:如何在包之间共享 js 库和 css的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有完整项目的情况下测试共享的 Symfony 2 Bundle

Symfony2 共享的 CSS 和 JS 资产在哪里,最佳实践是明智的?

怎么制作静态库和共享库 C++/C

如何使用 angularJS 在多个项目之间共享代码

C语言中静态库和动态库的区别,如何使用它们

c的静态库和动态库