在TYPO3中如何避免運行時錯誤?使用phpstan-typo3進行靜態分析

在使用 TYPO3 cms 進行項目開發時,我們經常會遇到一些難以察覺的錯誤,這些錯誤往往只有在運行時才會暴露出來。例如,Context->getAspect() 方法的返回值類型PropertyMapper->convert() 方法的類型轉換,以及 MathUtility::forceIntegerInRange() 方法的返回值范圍等等,這些類型信息對于 PHPStan 來說是未知的,導致靜態分析無法準確地進行。composer在線學習地址:學習地址

saschaegerer/phpstan-typo3 擴展正是為了解決這些問題而誕生的。它通過提供 typo3 cms 相關的類型信息和規則,增強了 phpstan 的靜態分析能力,從而幫助開發者在編碼階段發現潛在的類型錯誤、參數錯誤和邏輯錯誤。

Dynamic Return Type Extensions

該擴展提供了動態返回類型擴展,可以幫助 PHPStan 理解 TYPO3 CMS 中一些特殊方法的返回值類型。例如:

  • TYPO3CMSCoreContextContext->getAspect(): 確保返回正確的 Aspect 對象類型。
  • TYPO3CMSExtbasePropertyPropertyMapper->convert(): 確保屬性映射轉換返回正確的類型。
  • TYPO3CMSCoreUtilityMathUtility methods: 確保像 isIntegerInRange 這樣的方法返回正確的類型。
  • TYPO3CMSExtbasePersistenceGenericQuery->execute() 和 TYPO3CMSExtbasePersistenceQueryInterface->execute(): 確保查詢執行返回正確的對象類型。
  • TYPO3CMSCoreSiteEntitySite->getAttribute() 和 PsrhttpMessageServerRequestInterface->getAttribute(): 確保返回正確的屬性類型。

例如,PHPStan 原本無法得知 MathUtility::forceIntegerInRange(100, 1, 10) 的返回值范圍是 1 到 10 之間的整數。安裝此擴展后,PHPStan 就能理解該方法的返回值類型,從而可以檢測出一些潛在的邏輯錯誤。

Framework Specific Rules

立即學習PHP免費學習筆記(深入)”;

該擴展還提供了一些 TYPO3 CMS 特定的規則,可以幫助開發者避免一些常見的錯誤。例如:

  • TYPO3CMSCoreContextContext->getAspect(): 確保正確使用 Context API。
  • PsrHttpMessageServerRequestInterface->getAttribute(): 確保正確使用 PSR-7 請求屬性。
  • TYPO3CMSCoreSiteEntitySite->getAttribute(): 確保正確使用 Site API 屬性。
  • TYPO3CMSExtbaseValidationValidatorResolver->createValidator(): 確保創建驗證器時傳遞了所有必需的選項。

例如,PHPStan 原本無法得知調用 ValidatorResolver->createValidator(RegularExpressionValidator::class) 時需要傳遞 regularExpression 選項。安裝此擴展后,PHPStan 就能檢測出這種錯誤,從而避免運行時錯誤。

安裝和配置

使用 Composer 安裝 saschaegerer/phpstan-typo3 擴展非常簡單:

composer require --dev saschaegerer/phpstan-typo3

如果安裝了 phpstan/extension-installer,則會自動完成配置。否則,需要在 phpstan.neon 文件中手動添加以下配置:

includes:     - vendor/saschaegerer/phpstan-typo3/extension.neon

自定義配置

該擴展還支持自定義配置,可以根據項目的實際情況進行調整。例如,可以自定義 Context API Aspect 的映射、Request Attribute 的映射以及 Site Attribute 的映射。

總結

saschaegerer/phpstan-typo3 擴展極大地增強了 PHPStan 在 TYPO3 CMS 項目中的靜態分析能力。通過提供 TYPO3 CMS 相關的類型信息和規則,它可以幫助開發者在編碼階段發現潛在的錯誤,從而提高代碼質量和減少運行時錯誤。對于 TYPO3 CMS 開發者來說,這是一個非常有用的工具

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享