macopedia/phpstan-magento1

PHPStan 扩展,用于允许分析 Magento 1 代码。

v1.0.7 2023-06-13 14:11 UTC

README

PHPStan 扩展,用于允许分析 Magento 1 代码。它运行时不需要数据库连接。

用法

phpstan.neon 添加到您的 Magento 1/OpenMage 项目中。

确保它包含以下内容

includes:
    - vendor/macopedia/phpstan-magento1/extension.neon

然后运行

composer require --dev macopedia/phpstan-magento1

替代 Magento 路径

默认情况下,此扩展假定 Magento 目录位于 %currentWorkingDirectory%/htdocs。您可以通过更改 phpstan.neon 文件中的 magentoRootPath 参数来修改路径。将以下内容添加到项目的 phpstan.neon 文件中:

parameters:
    magentoRootPath: %currentWorkingDirectory%/htdocs

分析 Magento 模块的示例配置文件

includes:
    - vendor/macopedia/phpstan-magento1/extension.neon
parameters:
    magentoRootPath: %currentWorkingDirectory%/htdocs
    paths:
        #lets start small with just our extensions
        - %currentWorkingDirectory%/app/code/local/VendorName/ModuleName
    excludePaths:
        - */Vendor/ModuleName/SomePathToExclude/*
    level: 0

已知问题

数据/SQL 脚本无法测试

由于这些脚本在从设置类中包含时使用了假定的 $this 变量,需要进行工作来

  • 找出正确的设置类
  • 以某种方式让 phpstan 知道文件中的它

Magento 流畅接口类对子类来说不是流畅的

这导致对类对象的后续调用假设了定义返回类型的超类的范围。

这是由于它们的 PHPDoc 没有使用最新的方式来指定使用 $this 作为类型的子类流畅性。

解决选项

  • 避免在这些类上使用流畅接口
  • 修补 Magento 代码以使用 $this 作为返回类型
  • 在子类中定义被调用方法的 @method PHPDoc
  • 将错误添加到 phpstan 配置的 parameters.ignoreErrors 中以忽略它 - 这将失去对流畅接口后续方法进行正确类型检查的能力

Mage_Core_Model_Abstract::load $id 不是一个整数

这是由于 Mage_Core_Model_Abstract 类的 load 方法的 PHPDoc 不充分。它应该使用 "mixed" 类型来支持当第二个参数指定字段时。

PHPStan 扩展没有修改现有方法参数的方法。

解决选项

  • 修补 Magento 代码以使用 mixed 作为 $id 参数类型
  • 如果链中的超类可用,请使用具有正确参数类型的 loadBy{Field} 方法
  • 在您的类中(扩展自 Mage_Core_Model_Abstract 或其子类)定义带有正确参数类型的 @method PHPDoc
  • 将错误添加到 phpstan 配置的 parameters.ignoreErrors 中以忽略它