# EC-CUBE4 Twig テンプレートエンジン

Twig は、PHP のテンプレートエンジンの一つであり、Symfony フレームワークにも標準で採用されている人気の高いテンプレートエンジンです。

Twig は、シンプルで直感的な文法を持っており、簡単にテンプレートを作成できるため、Web アプリケーションの開発に広く利用されています。また、セキュリティ上の理由から、Twig は PHP コードの実行を禁止しており、テンプレート内で PHP コードを実行することができません。

Twig の特徴として、ビューのテンプレートの拡張性が高く、自由自在にカスタマイズできることが挙げられます。また、テンプレート内で変数や関数を使って、柔軟に表示内容を変更することができます。

EC-CUBE 4 では、Twig が採用されており、ビューのテンプレートを Twig で記述することができます。Twig の文法に慣れることで、より簡単にビューのテンプレートを作成することができます。

# Twig と Laravel Blade テンプレートエンジン比較

Twig の特徴

  • シンプルで直感的な文法を持つ
  • テンプレート内で PHP コードの実行を禁止しており、セキュリティが高い
  • テンプレート内で独自のフィルターや関数を定義することができる
  • テンプレートの拡張性が高く、自由自在にカスタマイズできる
  • ビューのテンプレートを Twig で記述することができる Symfony フレームワークに標準で採用されている

Laravel Blade の特徴

  • PHP コードを直接書くことができるため、柔軟性が高い
  • 簡単にテンプレートを継承することができる
  • ディレクティブを使用することで、繰り返し処理や条件分岐を簡単に記述することができる
  • テンプレートの記述がシンプルで、HTML との親和性が高い
  • ビューのテンプレートを Laravel フレームワークに標準で採用されている

Twig と Laravel Blade は、それぞれ特徴があります。Twig はシンプルな文法を持ち、セキュリティが高いため、テンプレートの拡張性やカスタマイズ性が高いです。
一方で、Laravel Blade は PHP コードを直接書けるため、柔軟性が高く、繰り返し処理や条件分岐を簡単に記述することができます。

# Twig url  ファンクション

EC-CUBE の Twig テンプレートには、URL を生成するための便利な関数 url が用意されています。この関数は、リンク先の URL を自動的に生成してくれるため、テンプレートの記述が簡単になります。

仕様

{{ url(route_name, route_parameters = [], schemeRelative = false) }}

route_name
type: string

route_parameters (optional)
type: array default: []

schemeRelative (optional)
type: boolean default: false

第 1 引数は route_name というルート名を指定しています。
第 2 引数では、パラメーターを指定します。
第 3 引数は、schemeRelative パラメーターを使用して、スキームを省略した URL を生成することができます。

<a href="{{ url('product_detail', {id: product.id}, false) }}">商品詳細ページへ</a>

# app.user User 情報を取得する方法

User 情報を取得するには、セッションから User 情報を取得する方法があります。

// user id
{{ app.user.id }}

// user login_date 取得
{{ app.user.login_date|date_min }}

// user name 取得
{{ app.user.name}}

// user 2段階認証
{{ app.user.two_factor_auth_enabled }}

// user 姓
{{ app.user.name01 }}

// user 名
{{ app.user.name02 }}

// user 氏名
{{ app.user.name }}
// user point数
{{ app.user.point|number_format }}

# app.session Session 情報を取得する方法

Session 情報を取得するには、app.session 変数を使用します。例えば、セッションに保存されている情報を取得するには、以下のように記述します。

// お問い合わせページ情報
{{ app.session.get('eccube.admin.contact.search.page_no')|default('1') }}

// 管理画面商品検索ページ情報
{{ app.session.get('eccube.admin.product.search.page_no')|default('1') }}

// カートまわり
{{ app.session.flashbag.get('eccube.front.request.product') }}
{{ app.session.flashbag.get('eccube.front.request.error') }}
{{ app.session.flashbag.get('eccube.front.cart.error') }}
{{ app.session.flashbag.get('eccube.front.cart.' ~ cartKey ~ '.request.error') }}

// ログインまわり
{{ app.session.flashBag.has('eccube.login.target.path') }}
{{ app.session.flashBag.peek('eccube.login.target.path') }}
{{ app.session.flashbag.get('password_reset_complete') }}

// アラートまわり
{{ app.session.flashbag.get('eccube.front.error') }}
{{ app.session.flashbag.get('eccube.front.warning') }}

# app.request Request 情報を取得する方法

Request 情報を取得するには、app.request 変数を使用します。

// リクエストのHTTPメソッド
{{ app.request.getMethod() }}

// ページ処理
{{ app.request.query.all|merge({'page_no': pages.first}) }}
{{ app.request.query.all|merge({'page_no': pages.next}) }}

// 遷移元
{{ app.request.query.get('return') }}

// httpからスタートしてポートまでURL
{{ app.request.schemeAndHttpHost }}

// パス関係
{{ app.request.basePath }}
{{ app.request.baseUrl }}
2023-04-29
  • ec-cube