[Twig]現在のURL等を取得&パスの生成の仕方

今回はTwigですが、SymfonyのTwigの拡張機能についてです。
その中でも今回はルートのパスなどの取得の仕方や、作り方を紹介したいと思います。

公式:Twig Extensions Defined by Symfony

Twigでルート名やパラメータを取得する

Symfonyの拡張機能で、グローバルな変数としてappという変数が使用できます。
ルートなどの情報もappの中に格納されています。

ルート名を取得する

たとえば下記のようなルート設定のページがあったとします。(以後このページ設定を使用)

// Sample Root (Controller)
    /**
     * test product page.
     *
     * @Route(
     *      "/product/{id}/{type}",
     *      name="product_main", methods={"GET"},
     *      defaults={"type" = 1}
     * )
...

ルート名やパラメータを取得する方法は下記になります。

// Global Variables
// Route Name
app.request.attributes.get('_route')

// dump Variables
"product_main"

// Route Params
app.request.attributes.get('_route_params')

// dump Variables
array:2 [
  "id" => 13,
  "type" => 1
]

Twigでpathを生成する

SymfonyのTwig Extensionsのpathの使い方です。

// Basic relative URL
path('route_name')

// Basic absolute URL
url('route_name')

基本的には上記のように、ルート名から相対URL・絶対URLを生成できます。今回のサンプルproduct_mainのようにパラメータが設定されているようなURLも生成できます。パラメータはdefaultが設定されていない場合は、必ず設定しなければなりません。

// product_main page sample
// current page
path(app.request.attributes.get('_route'), { 'id': app.request.attributes.get('_route_params').id})

// other id
path(app.request.attributes.get('_route'), { 'id': 11})

パラメータを複数指定する場合

path(app.request.attributes.get('_route'), { 'id': 11, 'type': 2})

 
簡単ですが、現在のルート情報の取得と、URLの生成の方法の紹介でした。

Twigおすすめの書籍

Twigだけに特化した書籍は読んだことがないのですが、AmazonのKindleにありました。
これと同じくらいブログでまとめられたらと思います。

テンプレートエンジンTwigを覚える本