2012-07-11 57 views
0

例如,我有這樣的腳本:FosJsRoutingBundle與「_locale」

Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'en'}) 

是正確的,但是當我刪除「_locale」參數,它給我的錯誤,如「_locale」必須設置。 我的路由名稱_moderation_profile_confirm包含'_locale'前綴,但我怎樣才能發送路由管理器的'當前'區域設置?

回答

0

我supouse您在樹枝模板:

你可以使用這個速記,並得到當前區域:

Routing.generate('_moderation_profile_confirm',{'id':objectId,'_locale':'{{ app.session.locale }} '}) 
+0

我在一個純JavaScript文件,我只是想知道,如果這個區域設置選項是先決條件。 – ferdinandfly 2012-07-19 08:13:53

0

我複製到這裏了迴應,我在這裏提出 https://stackoverflow.com/a/35223108/279326

要設置請求區域設置到您對Routing.generate的所有調用,您可以重寫此方法並在每次調用中添加{{app.request.locale}}參數。以下腳本必須在樹枝模板中執行,幷包含路由腳本。

<!-- Include JSRouting libs & exposed routes --> 
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script> 
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script> 

<script> 
    $(function() { 
     // change name of initial method 
     Routing.generateImpl = Routing.generate; 
     // override generate fonction by adding a default _locale from request locale 
     Routing.generate = function (url, params) { 
      var paramsExt = {}; 
      if (params) { 
       paramsExt = params; 
      } 
      if (!paramsExt._locale){ 
       paramsExt._locale = '{{ app.request.locale }}'; 
      } 
      return Routing.generateImpl(url, paramsExt); 
     } 
    }) 
</script> 

現在你可以透明地使用Routing.generate沒有關於_locale PARAM無憂!

// in any JS file 
var url = Routing.generate('mypath'); 
var url2 = Routing.generate('another path', {param: 1}); 

要澄清代碼,可以將js文件中的前一個腳本隔離開來。爲此,必須定義一個全局變量。

<!-- for exemple in the <head> of the page --> 
<script> 
    var REQUEST_LOCALE = '{{ app.request.locale }}'; 
</script> 

所以在腳本可以使用REQUEST_LOCALE

// this line 
paramsExt._locale = '{{ app.request.locale }}'; 
// has to be replaced by 
paramsExt._locale = REQUEST_LOCALE; 
相關問題