警告:模棱两可的班级决议原则



运行作曲家更新后,我不断出现以下错误:

警告:类解析不明确, "Doctrine\ORM\Persisters\Entity\BasicEntityPersister" 都"$baseDir. '/engine/Library/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php" 和 "/var/www/html/shop5/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php", 将使用第一个。警告:类解析不明确, "Doctrine\Common\Proxy\AbstractProxyFactory"在两者中都被发现 "$baseDir. '/engine/Library/Doctrine/Common/Proxy/AbstractProxyFactory.php"和 "/var/www/html/shop5/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php", 将使用第一个。

我尝试运行以下命令,但它们都不起作用:

composer dump-autoload -o
composer clearcache

知道如何解决这个问题吗?谢谢

[购物软件5 - PHP 7.0]

这是购物软件的正常行为

Doctrine 库经常使用 final class 语句,为了使其与 Shopware 属性系统配合使用,这些类通过作曲家自动加载进行了替换。您可以在shopware/engine/Library/Doctrine/Common中找到更改的文件

仅供参考:这就是为什么 Shopware 仅在优化作曲家自动加载时才起作用的原因。

作曲家转储自动加载 --优化

否则,您会遇到来自无效或错误实体的随机错误。

要摆脱这些警告,您应该将具有不明确类的文件添加到composer.jsonexclude-from-classmap

"autoload": {
    ...
    "exclude-from-classmap": [
        ...
        "vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php",
        "vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php"
    ]
},

然后dump-autoload将忽略这些文件。


这就是为什么 Shopware 仅在优化作曲家自动加载时才起作用的原因。

我没有调查如何在 Shopware 中做到这一点,但这也可以修复/改进。对于作曲家来说,命名空间的更精确定义具有优先权。因此,如果您在自动加载中有此内容:

"autoload": {
    "psr-0": { 
        "somevendor\somepackage\": "vendor/somevendor/somepackage/",
        "somevendor\somepackage\db\": "overrides/somevendor/somepackage/db/"
    }
},

如果你要求somevendorsomepackagedbEntity类,作曲家会先搜索overrides/somevendor/somepackage/db/Entity.php,只有当找不到时,它才会尝试vendor/somevendor/somepackage/db/Entity.php。这是因为somevendorsomepackagedb命名空间的定义比somevendorsomepackage 更精确。

因此,如果要以这种方式覆盖第三方类,则应定义比第三方库更精确的命名空间。

相关内容

  • 没有找到相关文章

最新更新