# 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 }}