2012-03-17 32 views
5

我使用ExposeTranslationBundle(暴露翻譯的JavaScript)和JMSI18nRoutingBundle(暴露路線的JavaScript)。這是我<head>標籤的一部分:如何在Symfony2中結合這些資產?

{% 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>進口第一assetic以及如何結合?

+0

你是否在一個文件中的JavaScript塊,並在不同的文件中最後兩行? – Axxiss 2012-04-10 07:34:38

+0

@Axxiss最後兩行來自第三方包。 – Polmonino 2012-04-19 17:11:10

回答

3

我不能這樣做,因爲FOSJSRouting JavaScript文件是由控制器生成的。內部捆綁緩存js,但在應用程序/緩存中,所以它需要通過控制器每個請求。我不熟悉暴露翻譯包,但我想這是同樣的問題。

在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()); 

這在某種程度上的一種變通方法sollution。我一直在考慮實現一個通用綁定,這個任務可以使用控制器輸出js來配置其他幾個bundle。控制器動作必須在yml文件中配置,然後必須在每次部署/修改路由/字符串時執行命令。但是,我沒有帶來得及這個...然而,)

+0

不錯的解決方案thx! – 2014-10-26 16:15:26

1

而是進口的,你可以高興地把它內聯,即:

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

{# JMSI18nRoutingBundle ... #} 

</script> 

您需要檢查路由文件的包。