4

オプションのパラメーターを使用したルーティングがあります。

/**
  * @Route( "/route/{id}", name="_route", defaults={"id" = ""} )
  * @Template()
  */ 

テンプレートにはフォームがあり、フォームを次のいずれかに送信する必要があります。

/route

また:

/route/10
/route/10/mail – if there were more than just one parameter

現時点では、次のように解決しています。

{{ path(app.request.attributes.get('_route')) }}/{{ object.id }}

これは問題なく機能しますが、可能なすべてのパラメーターを自分で追加する必要があります。小枝内から完全な現在のパスを取得する方法はありますか? テンプレートに送信するためにコントローラーに余分な変数を追加したくありません。

4

4 に答える 4

17

RequestクラスにはgetRequestUri()メソッドがあります。小枝のようにアクセスできます

{{ app.request.requesturi }}
于 2012-06-21T17:00:45.787 に答える
6

もう1つの方法があります(それが良い方法かどうかはわかりません):

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}

この場合、追加のパラメーターを追加できます。

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'p': 10})) }}
于 2013-05-22T09:44:23.303 に答える
0

異なるアクションです。さまざまなテンプレートを持つさまざまなアクション。小枝を使用すると、3 番目のテンプレートを拡張する 2 つまたは 3 つのテンプレートを使用できます。3 つ目では、リストのブロックを定義できます。そして、フォームのブロック。小枝では、テンプレートを拡張できます。

それでも、... さまざまなテンプレートとさまざまなアクションが必要だと思います。各アクションのテンプレートは、「スーパー」テンプレートをリストで拡張します。

于 2012-06-21T17:30:15.247 に答える
-1

アクションで複数の @Route を使用できます。

/**
  * @Route( "/route/{id}", name="_route" )
  * @Route( "/route/{id}/hello", name="_route_hello" )
  * @Route( "/route/{id}/hello/{world}", name="_route_hello_world" )
  * @Template()
  */

そして、変数が存在するかどうかを確認します...

しかし...別のルートで同じアクションを使用する必要があることを理解していません。「目的」ごとに1つのアクションを使用することを好みます。そしてDRYパターンに従うために、コードを書き換えないためのプライベートメソッドを書くのが好きです...

于 2012-06-21T12:02:49.123 に答える