0

我正在尝试在我的 OXID 6 eshop 上进行静态 PHP 代码分析。

然而,当涉及到这一点时,我正在碰壁:

当我运行时,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 工作?

4

2 回答 2

2

请升级到最新的 PHPStan 版本 0.12.33。

在 0.12.26 版本中,本文中描述的许多内容都进行了重新设计。主要的收获是,对于明显存在且无需任何额外配置的类,您不应再获得“找不到类”。

此外, autoload_files 已被弃用。请按照Discovering Symbols指南查看该怎么做(您很可能只需从配置中删除此部分)。

于 2020-07-22T17:34:57.097 回答
1

该类\mynamespace\Article_parent不存在,将在运行时作为别名创建。这是因为它取决于您的配置/安装在此别名指向的其他模块。

我的同事 Alfred Bez 创建了该oxid-dump-autoload工具,它将根据您当前的配置和设置转储模块链,以便 PHPStan / Psalm 可以找到类:

https://github.com/alfredbez/oxid-dump-autoload

希望我能帮上忙

于 2020-07-31T05:07:49.483 回答