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

編譯的Twig模板除錯

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

Twig 在 Drupal 中的正常運作方式

預設情況下,Twig 主題引擎將模板編譯成 PHP 代碼並將已編譯的模板代碼儲存在文件系統中(默認情況下,這些文件將位於 sites/default/files/php/twig)。

在 Twig 完成某些標記後,還有一層在 Render API 中的快取。這將由 Twig 創建的標記進行緩存,通常以 Twig 在後續頁面請求中不參與的方式進行緩存(如果緩存元數據保持不變),因此您可能認為 Twig 的 debug 或 auto_reload 設置無效,實際上則需要刷新渲染緩存(或者您偏好禁用它也可以)。

我們可以透過 Drupal 的清除緩存界面清除緩存,但對持續開發而言,修改 Drupal 的設定更加容易,使得 Render API 根本不緩存任何內容。請務必在渲染緩存開啟的情況下進行測試,否則很容易忽略在使用緩存的環境中,所發生的與緩存相關的錯誤。


分別配置Twig和Render API的兩個層面:

為了除錯目的,必須分別配置 Twig 和 Render API 的兩個層面:

  1. Twig 引擎提供了配置除錯、模板自動重新加載(重新編譯)以及在文件系統中緩存已編譯模板的選項,詳情請見 provides options。這可以在您網站的 services.yml 中進行配置。

  2. Render API的緩存可以在您網站的 settings.php 中進行配置。

我們將在下面更深入地討論這兩個階段。


1.配置 Twig 進行除錯

首先,按照上一篇文章中的描述使用 Twig 除錯。

Twig 除錯選項

注意:請不要在生產環境中設置這些選項!在生產環境中,應該將這三個選項保持未設置(即使用它們的默認值)。

debug(默認值:false)

當設置 debug: true 時:

  • 每個 Twig 模板的標記都被圍繞在包含主題訊息的 HTML 註釋中,例如模板文件建議名稱。

  • 請注意,此除錯標記將導致直接檢查渲染的 HTML 之自動化測試失敗。在運行自動化測試時,應將 'twig_debug' 設置為 FALSE。

  • 可以在 Twig 模板中使用 dump() 函數,輸出有關模板變量的訊息。

  • 每當源代碼更改時,Twig 模板會自動重新編譯(參見下面的 auto_reload)。

auto_reload(默認值:null,由上面的 debug 決定)

當設置 auto_reload: true 時:

  • 在源代碼更改時自動重新編譯 Twig 模板。如果不提供 twig_auto_reload 的值,它將根據 twig_debug 的值決定。

  • 除非您明確地希望使用 auto_reload 而不使用 debug,否則您不需要觸碰此設置。只需在上面使用 debug。

cache(默認值:true,但被上面的 debug 覆蓋)

當設置 cache: false 時:

  • 除非您有特定的使用案例,否則請不要禁止 Twig 快取。使用 Twig 除錯(或僅在出於某種原因不想使用除錯的情況下使用 auto_reload)將不會影響 Twig 快取。禁止 Twig 快取只會使開發體驗變慢,因為每次使用模板時都需要重新編譯,無論是否已經編輯過。此外,如果不將 Twig 快取緩存到磁碟上,則無法輕鬆地查看或除錯已編譯的 Twig 模板(默認情況下位於 sites/default/files/php/twig)。

  • 默認情況下,為了提高性能,Twig 模板將被編譯並儲存在文件系統中。禁止 Twig 快取將使每次使用模板時都需要從源代碼重新編譯。在大多數情況下,應使用上面的 twig_auto_reload 設置,而不是禁止 Twig 快取。


2.配置 Render API 快取進行除錯

默認情況下,Drupal 會對其執行的任何區塊和單元的渲染進行緩存,以加快後續頁面的加載速度。這意味著對這些區塊和單元的 Twig 模板之更改將不會立即生效。將渲染緩存設置為使用 Null 緩存,後端可以有效地禁止這一功能。

為了禁止渲染緩存,請添加以下語法:

  • settings.php,請注意不要將其添加到生產站點

  • settings.local.php,先取消註釋在底部的 settings.php這些語法之後再加入。

    這些語法是:

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null'; 

您可能會發現它們已經在您的 settings.php 中被註釋掉了;如果是這樣,只需取消註釋它們(但請記得稍後再重新註釋它們)


我們完成了!

在確保 Twig 和 Render API 的設定都生效後,請清除所有緩存:您可以使用 Drush,或者轉到「Configuration -> Performance」然後點擊「Clear all caches」按鈕。

最後,刷新您正在檢查的頁面:您應該在頁面源代碼中看到 Twig 的除錯訊息,並且對 Twig 模板的更新應該能立即傳播到任何刷新的頁面。

返回Drupal
首頁  >  Drupal  >  編譯的Twig模板除錯

編譯的Twig模板除錯

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

Twig 在 Drupal 中的正常運作方式

預設情況下,Twig 主題引擎將模板編譯成 PHP 代碼並將已編譯的模板代碼儲存在文件系統中(默認情況下,這些文件將位於 sites/default/files/php/twig)。

在 Twig 完成某些標記後,還有一層在 Render API 中的快取。這將由 Twig 創建的標記進行緩存,通常以 Twig 在後續頁面請求中不參與的方式進行緩存(如果緩存元數據保持不變),因此您可能認為 Twig 的 debug 或 auto_reload 設置無效,實際上則需要刷新渲染緩存(或者您偏好禁用它也可以)。

我們可以透過 Drupal 的清除緩存界面清除緩存,但對持續開發而言,修改 Drupal 的設定更加容易,使得 Render API 根本不緩存任何內容。請務必在渲染緩存開啟的情況下進行測試,否則很容易忽略在使用緩存的環境中,所發生的與緩存相關的錯誤。


分別配置Twig和Render API的兩個層面:

為了除錯目的,必須分別配置 Twig 和 Render API 的兩個層面:

  1. Twig 引擎提供了配置除錯、模板自動重新加載(重新編譯)以及在文件系統中緩存已編譯模板的選項,詳情請見 provides options。這可以在您網站的 services.yml 中進行配置。

  2. Render API的緩存可以在您網站的 settings.php 中進行配置。

我們將在下面更深入地討論這兩個階段。


1.配置 Twig 進行除錯

首先,按照上一篇文章中的描述使用 Twig 除錯。

Twig 除錯選項

注意:請不要在生產環境中設置這些選項!在生產環境中,應該將這三個選項保持未設置(即使用它們的默認值)。

debug(默認值:false)

當設置 debug: true 時:

  • 每個 Twig 模板的標記都被圍繞在包含主題訊息的 HTML 註釋中,例如模板文件建議名稱。

  • 請注意,此除錯標記將導致直接檢查渲染的 HTML 之自動化測試失敗。在運行自動化測試時,應將 'twig_debug' 設置為 FALSE。

  • 可以在 Twig 模板中使用 dump() 函數,輸出有關模板變量的訊息。

  • 每當源代碼更改時,Twig 模板會自動重新編譯(參見下面的 auto_reload)。

auto_reload(默認值:null,由上面的 debug 決定)

當設置 auto_reload: true 時:

  • 在源代碼更改時自動重新編譯 Twig 模板。如果不提供 twig_auto_reload 的值,它將根據 twig_debug 的值決定。

  • 除非您明確地希望使用 auto_reload 而不使用 debug,否則您不需要觸碰此設置。只需在上面使用 debug。

cache(默認值:true,但被上面的 debug 覆蓋)

當設置 cache: false 時:

  • 除非您有特定的使用案例,否則請不要禁止 Twig 快取。使用 Twig 除錯(或僅在出於某種原因不想使用除錯的情況下使用 auto_reload)將不會影響 Twig 快取。禁止 Twig 快取只會使開發體驗變慢,因為每次使用模板時都需要重新編譯,無論是否已經編輯過。此外,如果不將 Twig 快取緩存到磁碟上,則無法輕鬆地查看或除錯已編譯的 Twig 模板(默認情況下位於 sites/default/files/php/twig)。

  • 默認情況下,為了提高性能,Twig 模板將被編譯並儲存在文件系統中。禁止 Twig 快取將使每次使用模板時都需要從源代碼重新編譯。在大多數情況下,應使用上面的 twig_auto_reload 設置,而不是禁止 Twig 快取。


2.配置 Render API 快取進行除錯

默認情況下,Drupal 會對其執行的任何區塊和單元的渲染進行緩存,以加快後續頁面的加載速度。這意味著對這些區塊和單元的 Twig 模板之更改將不會立即生效。將渲染緩存設置為使用 Null 緩存,後端可以有效地禁止這一功能。

為了禁止渲染緩存,請添加以下語法:

  • settings.php,請注意不要將其添加到生產站點

  • settings.local.php,先取消註釋在底部的 settings.php這些語法之後再加入。

    這些語法是:

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null'; 

您可能會發現它們已經在您的 settings.php 中被註釋掉了;如果是這樣,只需取消註釋它們(但請記得稍後再重新註釋它們)


我們完成了!

在確保 Twig 和 Render API 的設定都生效後,請清除所有緩存:您可以使用 Drush,或者轉到「Configuration -> Performance」然後點擊「Clear all caches」按鈕。

最後,刷新您正在檢查的頁面:您應該在頁面源代碼中看到 Twig 的除錯訊息,並且對 Twig 模板的更新應該能立即傳播到任何刷新的頁面。