Как совместить эту сборку в Symfony2? - PullRequest
5 голосов
/ 17 марта 2012

Я использую 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> в первую сборку и как?

Ответы [ 2 ]

3 голосов
/ 07 июня 2012

Я думаю, что это невозможно, потому что файл javascript FOSJSRouting генерируется контроллером. Внутри комплекты кэшируют js, но в app / cache, поэтому он должен проходить через контроллер каждый запрос. Я не знаком с пакетом переводов expose, но, думаю, здесь та же проблема.

В треке вопросов FOSJsRouterBundle на github постоянно идет обсуждение, и есть также решение. Смотрите полный выпуск здесь: 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 голос
/ 20 августа 2012

Вместо импорта вы можете с радостью поместить его в строку, например:

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

{# JMSI18nRoutingBundle ... #}

</script>

Вам необходимо проверить файл маршрутизации для этих пакетов.

...