首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Twig 模板存取 Symfony 全域變數完整指南:app.session、app.request 等核心變數詳解

     編輯:PHP 相關知識

Twig 語法速覽:三大核心標籤

在 Symfony 專案中,Twig 是預設模板引擎。掌握三種基本語法即可應付大多數場景:

語法用途範例
{{ ... }}輸出變數/運算式結果{{ user.name }}
{% ... %}控制結構(判斷、迴圈、區塊){% if user.isActive %}...{% endif %}
{# ... #}註解(不會輸出至 HTML){# 這是註解 #}

常見判斷式範例

{# 判斷布林值 #}
{% if online == false %}
    <p>網站維護中,請稍後再來。</p>
{% endif %}

{# 判斷陣列非空並迴圈 #}
{% if users %}
    <ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
    </ul>
{% endif %}

{# 判斷變數是否定義 #}
{% if users is defined %}
    <li>{{ user.username|e }}</li>
{% endif %}

核心議題:如何在 Twig 中取得全域變數?

Symfony 自動注入一個 app 全域變數,封裝常用服務:

  • app.session — Session 物件
  • app.request — Request 物件
  • app.user — 當前登入使用者
  • app.environment — 當前環境
  • app.debug — 是否除錯模式

存取 Session 資料

{# 取得 session 中的 'varname' 值 #}
{{ app.session.get('varname') }}

{# 判斷 session 是否存在某鍵值 #}
{% if app.session.has('flash_message') %}
    <div class="alert">{{ app.session.get('flash_message') }}</div>
{% endif %}

存取 Request 參數

{# 取得查詢字串參數 ?page=2 #}
{{ app.request.query.get('page') }}

{# 取得 POST 表單欄位 #}
{{ app.request.request.get('username') }}

{# 取得路由參數(如 /user/{id}) #}
{{ app.request.attributes.get('id') }}

{# 取得完整 URL #}
{{ app.request.uri }}

其他實用全域變數

{# 當前使用者物件 #}
{{ app.user.username }}
{{ app.user.email }}

{# 環境判斷 #}
{% if app.environment == 'prod' %}
    <script src="analytics.js"></script>
{% endif %}

{# CSRF Token(表單保護) #}
{{ csrf_token('form_intention') }}

進階技巧:自訂全域變數

若需在所有模板共享自訂資料,可在 twig.yaml 或透過 TwigExtension 註冊:

# config/packages/twig.yaml
twig:
    globals:
        site_name: "我的網站"
        ga_tracking_id: "UA-XXXXXXXX-X"

模板中直接使用:{{ site_name }}

常見誤區與避坑指南

  1. 誤以為 app.session 是陣列:實為 SessionInterface 物件,需呼叫 get()、has() 等方法
  2. 直接輸出未轉義變數:務必善用 |e 過濾器防止 XSS,或啟用 autoescape
  3. 在模板中執行複雜邏輯:應移至 Controller 或 Service,模板僅負責呈現

延伸閱讀

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved