在运行composer更新之后,我一直有以下错误:
警告:类解析不明确,"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”同时出现在“'/engine/Library/Doctrine/Common/Proxy/AbstractProxyFactory.php”.$baseDir“和”"/var/www/html/shop5/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php",“--第一个将被使用。
我尝试过运行以下命令,但这些命令都没有工作:
composer dump-autoload -o
composer clearcache知道怎么解决这个问题吗?谢谢
shopware5 - php7.0
发布于 2018-01-12 12:21:36
这是Shopware的正常行为。
Doctrine库经常使用final class语句,为了使它与Shopware属性系统一起工作,类被通过编写器自动替换。您可以在shopware/engine/Library/Doctrine/Common中找到已更改的文件
FYI:这就是为什么Shopware只在优化作曲家自动加载时才能工作的原因。
作曲家转储-自选-优化
否则,您将遇到来自无效或错误实体的随机错误。
发布于 2018-04-25 11:58:49
为了消除这些警告,您应该在exclude-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中是如何做到这一点的,但这也是可以修复/改进的。对于composer来说,名称空间的更精确的定义有优先权。所以如果你的自传里有这个:
"autoload": {
"psr-0": {
"somevendor\\somepackage\\": "vendor/somevendor/somepackage/",
"somevendor\\somepackage\\db\\": "overrides/somevendor/somepackage/db/"
}
},如果您请求somevendor\somepackage\db\Entity类,那么编写器将首先在overrides/somevendor/somepackage/db/Entity.php中搜索,只有当它找不到它时,它才会尝试vendor/somevendor/somepackage/db/Entity.php。这是因为somevendor\somepackage\db命名空间的定义比somevendor\somepackage更精确。
因此,如果您想以这种方式覆盖第三方类,您应该定义比第三方库更精确的名称空间。
https://stackoverflow.com/questions/48173258
复制相似问题