在使用 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 開發者來說,這是一個非常有用的工具。