移至主內容
首頁  >  Drupal目錄  >  Twig 模板除錯

Twig 模板除錯

Tag :
twig, debugging
Written by Shiuan on 7 December 2023

Twig 模板引擎提供了一個除錯工具。

Drupal 8 還新增了一個額外的工具,讓您能夠找到輸出標記的模板

警告:開啟 Twig 除錯工具可能會破壞網站的某些部分,特別是 Views。詳情請參考 this issue


啟用除錯功能

從 Drupal 10.1 開始,我們可以透過管理員 > 設定 > 開發設定/admin/config/development/settings)啟用 Twig 除錯。

這也可以透過在 sites/default/services.yml 或類似的服務覆寫檔案,例如,development.services.yml 中啟用 Twig 除錯來進行控制。


透過 services.yml 啟用 Twig 除錯

將 debug 變數設置為 true,然後清除快取。

parameters:
 twig.config:
   debug: true 

  • 如果 services.yml 不存在,請將 default.services.yml 複製為 services.yml

  • 如果 Drupal 已經安裝,可能需要暫時更改 sites/default 目錄的權限以允許寫入訪問。

  • 如何更改目錄權限,詳情請參考 How to change directory permissions。

  • 一旦建立並編輯了 services.yml,請將權限更改回鎖定 sites/default 目錄。

為了驗證 Drupal 是否按預期設置 twig.config 參數,請執行以下命令:

drush php:eval "var_export(\Drupal::getContainer()->getParameter('twig.config'));"

並檢查所列印的 PHP 陣列是否將 debug 設置為 TRUE。如果其他 twig.config 子選項已設置,它們也應該顯示出來。

您也可以使用以下選項啟用 Twig 除錯:

  1. 使用 Twig Debugger 模組啟用 Twig 除錯。

  2. 使用 Mix 模組啟用 twig debug/auto_reload 並在開發中禁用快取。

  3. 使用 Drupal Console 啟用 Twig 除錯,詳情請參考 Enable Twig Debugging with Drupal Console


自動重新載入

為了提高性能,Twig 模板被編譯為儲存在磁碟上的 PHP 類,但這意味著默認情況下,在進行更改時不會刷新模板。請勿在生產環境中啟用此功能。

要手動重建模板,請執行 drush cr。為了在開發過程中節省時間,您可以在 services.yml 中設置 twig.config.auto_reload: true 來啟用自動重新載入(默認情況下,啟用 twig.config.debug: true 也會開啟自動重新載入)。

有關更多訊息,請參見 https://drupal.org/node/1903374


查看變數

在處理查看變數的問題上,最好的方法往往是使用 Xdebug。

如果您使用下面提到的,其他非 Xdebug 的方法,可能會有許多遞迴的事物呈現,可能會導致頁面上顯示許多對您無用的訊息。

最經常推薦的方法是使用 PHPstorm 和 Xdebug,因為配置最簡單,但幾乎所有的集成開發環境都有 Xdebug 的插件。如果您想使用一個相對輕量的免費編輯器,Microsoft 的 VSCode 編輯器是一個開源選擇,並且有用於 PHP 和 Xdebug 的插件。

設置 Xdebug

設置 Xdebug 可能很複雜,所以請記得閱讀您的 IDE 插件的說明,並查閱 Xdebug 的文檔以了解如何連接它。僅僅閱讀在線的 howtos 和錯誤報告將是浪費時間的,如果您定位的是錯誤的環境類型(即如果您的 Xdebug 在 Vagrant、Virtualbox 或 Docker 中,您可能需要 "remote" 連接的說明:https://xdebug.org/docs/remote)。

Drupal.org 提供了各種編輯器的 Xdebug 指南,可以在這裡找到:https://www.drupal.org/docs/develop/development-tools/xdebug-debugger

當您啟用 Xdebug 後:

您有三種方法可以在 Twig 模板中設置斷點,以便您的 IDE 顯示有關 PHP 環境的變數和其他有狀態的訊息:

  • 使用 PHPStorm 的新 Twig 除錯功能(blog, docs)。不需要使用 Drupal 模組。

  • 使用 Devel 模組

{{ devel_breakpoint() }}

{{ breakpoint() }}


如果您無法設置 Xdebug...

請繼續閱讀以下內容,祝您好運。

{{ dump() }}

{{ dump(variable_name) }}

列出可用變數(在頂層):

{{ dump(_context|keys) }}

如果您使用 Devel 模組,您可以使用以下方式獲取對 Twig 可用的變數之摺疊顯示:

{{ devel_dump() }}

或者,您可以使用 Twig vardumper 模組,其中包含 Twig 的 vardumper。您可以使用以下方式獲取對 Twig 可用的變數之摺疊顯示:

{{ dump() }}
{{ dump(variable_name) }}

{{ vardumper() }}
{{ vardumper(variable_name) }}

但也請考慮到,花一兩個小時使 Xdebug 運作將使您的生活變得更輕鬆,因為它消除了對可以使用哪些變數的猜測。


如果您使用了錯誤的範例...

在使用 Twig 大量編碼時,有一件事需要考慮,那就是問自己是否真的需要在這個層次上進行複雜的活動。例如:考慮一下,您是否只需將現有的欄位格式化成插件文件,複製到自定義模組中(記得使用相同的路徑結構),然後只需更改註釋(介紹評論,又稱插件名稱),並自定義 PHP/HTML 以在執行您想要的操作。在Drupal 8中,插件只是獨立的文件,位於特定的文件夾中,非常容易使用。

在下一節中,可以找到更多的除錯選項。

返回Drupal
首頁  >  Drupal  >  Twig 模板除錯

Twig 模板除錯

Tag :
twig, debugging
Written by Shiuan on 7 December 2023

Twig 模板引擎提供了一個除錯工具。

Drupal 8 還新增了一個額外的工具,讓您能夠找到輸出標記的模板

警告:開啟 Twig 除錯工具可能會破壞網站的某些部分,特別是 Views。詳情請參考 this issue


啟用除錯功能

從 Drupal 10.1 開始,我們可以透過管理員 > 設定 > 開發設定/admin/config/development/settings)啟用 Twig 除錯。

這也可以透過在 sites/default/services.yml 或類似的服務覆寫檔案,例如,development.services.yml 中啟用 Twig 除錯來進行控制。


透過 services.yml 啟用 Twig 除錯

將 debug 變數設置為 true,然後清除快取。

parameters:
 twig.config:
   debug: true 

  • 如果 services.yml 不存在,請將 default.services.yml 複製為 services.yml

  • 如果 Drupal 已經安裝,可能需要暫時更改 sites/default 目錄的權限以允許寫入訪問。

  • 如何更改目錄權限,詳情請參考 How to change directory permissions。

  • 一旦建立並編輯了 services.yml,請將權限更改回鎖定 sites/default 目錄。

為了驗證 Drupal 是否按預期設置 twig.config 參數,請執行以下命令:

drush php:eval "var_export(\Drupal::getContainer()->getParameter('twig.config'));"

並檢查所列印的 PHP 陣列是否將 debug 設置為 TRUE。如果其他 twig.config 子選項已設置,它們也應該顯示出來。

您也可以使用以下選項啟用 Twig 除錯:

  1. 使用 Twig Debugger 模組啟用 Twig 除錯。

  2. 使用 Mix 模組啟用 twig debug/auto_reload 並在開發中禁用快取。

  3. 使用 Drupal Console 啟用 Twig 除錯,詳情請參考 Enable Twig Debugging with Drupal Console


自動重新載入

為了提高性能,Twig 模板被編譯為儲存在磁碟上的 PHP 類,但這意味著默認情況下,在進行更改時不會刷新模板。請勿在生產環境中啟用此功能。

要手動重建模板,請執行 drush cr。為了在開發過程中節省時間,您可以在 services.yml 中設置 twig.config.auto_reload: true 來啟用自動重新載入(默認情況下,啟用 twig.config.debug: true 也會開啟自動重新載入)。

有關更多訊息,請參見 https://drupal.org/node/1903374


查看變數

在處理查看變數的問題上,最好的方法往往是使用 Xdebug。

如果您使用下面提到的,其他非 Xdebug 的方法,可能會有許多遞迴的事物呈現,可能會導致頁面上顯示許多對您無用的訊息。

最經常推薦的方法是使用 PHPstorm 和 Xdebug,因為配置最簡單,但幾乎所有的集成開發環境都有 Xdebug 的插件。如果您想使用一個相對輕量的免費編輯器,Microsoft 的 VSCode 編輯器是一個開源選擇,並且有用於 PHP 和 Xdebug 的插件。

設置 Xdebug

設置 Xdebug 可能很複雜,所以請記得閱讀您的 IDE 插件的說明,並查閱 Xdebug 的文檔以了解如何連接它。僅僅閱讀在線的 howtos 和錯誤報告將是浪費時間的,如果您定位的是錯誤的環境類型(即如果您的 Xdebug 在 Vagrant、Virtualbox 或 Docker 中,您可能需要 "remote" 連接的說明:https://xdebug.org/docs/remote)。

Drupal.org 提供了各種編輯器的 Xdebug 指南,可以在這裡找到:https://www.drupal.org/docs/develop/development-tools/xdebug-debugger

當您啟用 Xdebug 後:

您有三種方法可以在 Twig 模板中設置斷點,以便您的 IDE 顯示有關 PHP 環境的變數和其他有狀態的訊息:

  • 使用 PHPStorm 的新 Twig 除錯功能(blog, docs)。不需要使用 Drupal 模組。

  • 使用 Devel 模組

{{ devel_breakpoint() }}

{{ breakpoint() }}


如果您無法設置 Xdebug...

請繼續閱讀以下內容,祝您好運。

{{ dump() }}

{{ dump(variable_name) }}

列出可用變數(在頂層):

{{ dump(_context|keys) }}

如果您使用 Devel 模組,您可以使用以下方式獲取對 Twig 可用的變數之摺疊顯示:

{{ devel_dump() }}

或者,您可以使用 Twig vardumper 模組,其中包含 Twig 的 vardumper。您可以使用以下方式獲取對 Twig 可用的變數之摺疊顯示:

{{ dump() }}
{{ dump(variable_name) }}

{{ vardumper() }}
{{ vardumper(variable_name) }}

但也請考慮到,花一兩個小時使 Xdebug 運作將使您的生活變得更輕鬆,因為它消除了對可以使用哪些變數的猜測。


如果您使用了錯誤的範例...

在使用 Twig 大量編碼時,有一件事需要考慮,那就是問自己是否真的需要在這個層次上進行複雜的活動。例如:考慮一下,您是否只需將現有的欄位格式化成插件文件,複製到自定義模組中(記得使用相同的路徑結構),然後只需更改註釋(介紹評論,又稱插件名稱),並自定義 PHP/HTML 以在執行您想要的操作。在Drupal 8中,插件只是獨立的文件,位於特定的文件夾中,非常容易使用。

在下一節中,可以找到更多的除錯選項。