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>

最後の 2 つの<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 に答える