1

One of my route is defined like this:

society_mybundle_searchpage:
    pattern:  /search/cp/{cp}
    defaults: { _controller: SocietyMyBundle:Search:searchByCP }

So it needs one parameter: {cp}.

Now I'd like to create a form with an input widget. So my code is like that:

  <form onsubmit="return search();" action="#">
    {{ form_rest(form) }}
  </form>

(Nothing specific, I let symfony do all the work for me). Note that this form calls a JS function: search(). So here's my code in twig:

<script type="text/javascript">
<!--
function verif_formulaire(){
    /* some code to get the value of the cp */
    ...
    /* then: */
    ss="{{ path('society_mybundle_searchpage', {'cp': '+cp+'}) }}";
    return true;
}
-->
</script>

The output is:

function verif_formulaire(){
    ss="/symfony/web/app_dev.php/pizzas/search/cp/+tt+";
    return true;
}

This is not the output I need. I want the output to be exactly like that this:

function verif_formulaire(){
    ss="/symfony/web/app_dev.php/pizzas/search/cp/"+tt+"/";
    return true;
}

How shall I proceed?

4

2 に答える 2

2

私の解決策はurl_decode、twig でカスタム関数を実装することでした (非常に簡単です)。

次に、format()関数を使用します。

結果は次のとおりです。

window.location ="{{ path('my_path', {'cp': "%s" }) | url_decode | format('"+monCP+"') | raw }}";

説明:path('my_path', {'cp': "AAAA" })は「 」のような URL/mypath/cp/AAAA/を生成するため、「 」のようなpath('my_path', {'cp': "%s" })URL が生成されます/mypath/cp/%s/

ただし、「%s」はエスケープされます。だから私は ' ' を通してそれをデコードします| url_decode:

path('my_path', {'cp': "%s" }) | url_decode

適切な文字列 ' /mypath/cp/%s/' を生成します。

次に、format()関数を使用して文字列を渡します。

例: ' "/mypath/cp/%s/" | format('OLIVIER')' は' "/mypath/cp/OLIVIER/"'を返します

したがって、ここでは特定の文字列を渡します'"+monCP+"'(引用符と二重引用符に注意してください)。

したがって: ' "/mypath/cp/%s/" | format('"+monCP+"')' は' /mypath/cp/"+monCP+"/'を返します。

最後の問題: この文字列全体が再びエスケープされます。今回は古典的な「| raw」で十分です。

したがって、結論として、これは次のとおりです。

var xx ="{{ path('my_path', {'cp': "%s" }) | url_decode | format('"+monCP+"') | raw }}";

完全な通常の JavaScript コードになります。

var xx ="/my-symfony-url/cp/"+monCP+"/";

これは複雑に見えるかもしれませんが、うわー。外部 JavaScript ファイルは必要ありません。これが私が欲しかったものです。純粋に高速な Symfony 2 の php 生成キャッシュです。おそらく、これを Twig マクロか何かにすることができます。

于 2013-02-26T22:55:07.297 に答える
0

ご覧のとおり、JS でルートを生成する必要があります。FOSJsRoutingBundleが必要なのではないでしょうか?

于 2013-02-23T14:24:18.847 に答える