5

我正在使用ExposeTranslationBundle(向 javascript 公开翻译)和JMSI18nRoutingBundle(向 javascript 公开路由)。这是我的<head>标签的一部分:

    {% javascripts filter='?yui_js' output='js/app.js'
        '../app/Resources/public/js/jquery-*.js'
        '../app/Resources/public/js/jquery/*'
        '../app/Resources/public/js/app.js'
        'bundles/fosjsrouting/js/router.js'
        'bundles/bazingaexposetranslation/js/translation.js' %}
        <script src="{{ asset_url }}" ></script>
    {% endjavascripts %}

    <!-- ExposeTranslationBundle and JMSI18nRoutingBundle -->
    <script src="{{ path('fos_js_routing_js',
        {"callback": "fos.Router.setData"}) }}"></script>
    <script src="{{ url('bazinga_exposetranslation_js') }}"></script>

是否可以将最后两个<script>导入合并到第一个资产中,如何?

4

2 回答 2

3

我认为这是不可能的,因为 FOSJSRouting javascript 文件是由控制器生成的。捆绑包在内部缓存 js,但在 app/cache 中,因此每个请求都需要通过控制器。我不熟悉暴露翻译包,但我想这是同样的问题。

在 github 上 FOSJsRouterBundle 的 issue tracke 中一直在讨论,也有一个解决方案。在此处查看完整问题:https ://github.com/FriendsOfSymfony/FOSJsRoutingBundle/issues/22

解决方法是使用脚本或命令将输出转储到 web/js 目录中的文件:

<?php

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('stage', false);
$kernel->loadClassCache();
$response = $kernel->handle(Request::create('/js/routing?callback=fos.Router.setData'));

file_put_contents(__DIR__.'/../web/js/routes.js', $response->getContent());

这在某种程度上是一种解决方法。我一直在考虑实现一个通用包,可以使用控制器为其他几个包配置此任务以输出 js。控制器操作必须在 yml 文件中配置,然后必须在每次部署/修改路由/字符串时执行命令。但我还没有时间做这个......但是;)

于 2012-06-07T13:17:20.293 回答
1

您可以愉快地将其内联,而不是导入,即:

<script type="text/javascript">
{# BazingaExposeTranslation #}
{% render 'bazinga.exposetranslation.controller:exposeTranslationAction' 
   with { domain_name: "messages", _locale:app.session.locale, _format: "js" } %}

{# JMSI18nRoutingBundle ... #}

</script>

您需要检查这些捆绑包的路由文件。

于 2012-08-20T06:05:41.903 回答