我正在使用 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>
导入合并为第一个资产以及如何?
答案 0 :(得分:3)
我认为这是不可能的,因为FOSJSRouting javascript文件是由控制器生成的。在内部,bundle会缓存js,但是在app / cache中,因此每次请求都需要通过控制器。我不熟悉曝光翻译包,但我想这也是同样的问题。
在github上的FOSJsRouterBundle问题中一直在讨论,还有一个解决方案。请在此处查看完整问题: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文件中配置控制器操作,然后必须在每次部署/修改路由/字符串时执行命令。但我没有时间做这个......但是;)
答案 1 :(得分:1)
您可以愉快地将其内联,而不是导入,即:
<script type="text/javascript">
{# BazingaExposeTranslation #}
{% render 'bazinga.exposetranslation.controller:exposeTranslationAction'
with { domain_name: "messages", _locale:app.session.locale, _format: "js" } %}
{# JMSI18nRoutingBundle ... #}
</script>
您需要检查这些捆绑包的路由文件。