8

ここで、Symfony2 に関する私のn番目の質問を見つけることができます。

ファイルで提供されているルート名を使用するページネーション バンドルrouting.ymlを使用しています。私の見解では、このアプローチは柔軟ではなく、汚いコードにつながります。ルートの名前を変更すると、すべての Twig テンプレートまたは PHP ファイルを調べてルート名を更新する必要があるためです。これは小さな Web アプリケーションでは問題ありませんが、大規模なアプリケーションではこのようなバグが発生し、開発者にも大きな負担がかかります。

そのため、上記のバンドルによって提供されるオブジェクトに文字列変数xを渡すことを考えていました。Pager文字列xはコントローラー内で初期化する必要があり、ファイルで指定された目的のルート名を提供する必要がありrouting.ymlます。

例を挙げましょう。ルーティング ファイルは次のとおりです。

//routing.yml
 AcmeTestBundle_listall:
pattern:  /test/page/{page}
defaults: { _controller: AcmeTestBundle:List:listall, page: 1 }
requirements:
    page:  \d+   

次に、関連するコントローラーは次のとおりです。

//use something....
class ListController extends Controller
{

  public function exampleAction($page)
  {
    $array = range(1, 100);
    $adapter = new ArrayAdapter($array);
    $pager = new Pager($adapter, array('page' => $page, 'limit' => 25));

    return array('pager' => $pager);  
  }
}

次に、小枝テンプレートで、$pager上記のバンドルを参照するルート名を受け取ります

{% if pager.isPaginable %}
   {{ paginate(pager, 'AcmeTestBundle_listall') }}
{% endif %}
{% for item in pager.getResults %}
   <p>{{ item }}</p>
{% endfor %}

コントローラー内で実行時に「AcmeTestBundle_listall」文字列値を取得する方法はありますか?

4

1 に答える 1

30

twig で使用できるappグローバル変数を使用して、リクエストから現在のルートを取得できます。

{% if pager.isPaginable %}
   {{ paginate(pager, app.request.get('_route') }}
{% endif %}

詳細については、app こちらこちらをご覧ください。

于 2012-04-27T11:00:37.650 に答える