我正在尝试让静态PHP代码分析在我的Oxid6eShop上工作。
然而,当涉及到这一点时,我遇到了一个难题:
当我运行vendor/bin/phpstan analyse --configuration phpstan.neon source/modules/myvendor/mymodule时,我总是得到像Class mynamespace\Article_parent not found这样的错误。
这可能是因为在Oxid中,eshop类没有被直接覆盖,而是像这样声明
<?php
namespace mynamespace;
class Article extends Article_parent
{
...在metadata.php中,被覆盖的类被定义为:
'extend' => [
\OxidEsales\Eshop\Application\Model\Article::class => \mynamespace\Article::class,
],Phpstan似乎不能解决这个问题,我尝试了很多不同的配置文件,比如下面这个
parameters:
level: max
inferPrivatePropertyTypeFromConstructor: true
autoload_files:
- vendor/oxid-esales/oxideshop-ce/source/oxfunctions.php
- vendor/oxid-esales/oxideshop-ce/source/overridablefunctions.php或者是这个
parameters:
level: 7
autoload_files:
- vendor/oxid-esales/testing-library/base.php
- vendor/oxid-esales/oxideshop-ce/source/oxfunctions.php
- vendor/autoload.php但无济于事。怎样才能让phpstan正常工作呢?
发布于 2020-07-31 13:07:49
\mynamespace\Article_parent类不存在,将在运行时创建为别名。这是因为它取决于您的配置/此别名所指向的位置所安装的其他模块。
我的同事Alfred Bez创建了oxid-dump-autoload工具,它将根据您当前的配置和设置转储模块链,以便PHPStan / Psalm可以找到类:
https://github.com/alfredbez/oxid-dump-autoload
希望我能帮上忙
发布于 2020-07-23 01:34:57
请升级到最新的PHPStan版本0.12.33。
在版本0.12.26中,this article中描述的很多内容已经被修改过了。主要的结论是,对于明显存在而不需要任何额外配置的类,您不应该再得到"class not found“。
此外,autoload_files已被弃用。请按照Discovering Symbols指南查看要执行的操作(您很可能只需从配置中删除此部分)。
https://stackoverflow.com/questions/63038312
复制相似问题