2012-03-17 19 views
5

Tôi đang sử dụng ExposeTranslationBundle (lộ dịch để javascript) và JMSI18nRoutingBundle (lộ tuyến để javascript). Đây là một phần của thẻ <head> tôi:Làm thế nào để kết hợp các tài sản này trong 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> 

là có thể kết hợp hai <script> nhập khẩu cuối cùng vào assetic đầu tiên và làm thế nào?

+0

Bạn đã chặn javascript trong một tệp và hai dòng cuối cùng trong các tệp khác nhau? – Axxiss

+0

@Axxiss hai dòng cuối cùng đến từ các gói tiệc thrid. – Polmonino

Trả lời

3

Tôi không thể thực hiện điều này vì tệp javascript FOSJSRouting được tạo bởi bộ điều khiển. Internaly các bó lưu trữ các js nhưng trong ứng dụng/bộ nhớ cache, vì vậy nó cần phải đi qua bộ điều khiển mọi yêu cầu. Tôi không quen với gói dịch thuật tiếp xúc nhưng tôi đoán đó là vấn đề tương tự ở đây.

Đã có một cuộc thảo luận đang diễn ra trong vấn đề tracke của FOSJsRouterBundle trên github và cũng có một sollution. Xem các vấn đề đầy đủ ở đây: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle/issues/22

Cách giải quyết là phải có một kịch bản hay lệnh để đổ ra các tập tin trong web/js thư mục:

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

Đây là phần nào của một sollution workaround. Tôi đã suy nghĩ về việc thực hiện một gói chung mà ai đó nhiệm vụ này có thể được cấu hình cho một số bó khác bằng cách sử dụng bộ điều khiển để đầu ra js. Các hành động điều khiển sẽ phải được cấu hình trong một tệp yml và sau đó một lệnh sẽ phải được thực hiện tại mỗi triển khai/sửa đổi các tuyến/chuỗi. Nhưng tôi havn't có thời gian cho việc này ... chưa;)

+0

Giải pháp tốt đẹp thx! –

1

Thay vì nhập khẩu, bạn hạnh phúc có thể đặt nó nội tuyến, ví dụ:

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

{# JMSI18nRoutingBundle ... #} 

</script> 

Bạn cần phải kiểm tra các tập tin định tuyến cho những bó.

Các vấn đề liên quan