Symfony 警告:不明确的类别解析原则
运行composer update后,我一直出现以下错误: 警告:类解析不明确, 在中找到“条令\ORM\Persisters\Entity\BasicEntityPersister” 都是“$baseDir”。 “/engine/Library/Doctrine/ORM/Persisters/Entity/basicnitypersister.php” 和 “/var/www/html/shop5/vendor/doctrine/orm/lib/doctrine/orm/Persisters/Entity/basicnitypersister.php”, 第一个将被使用。警告:类解析不明确, 在两者中都找到了“条令\Common\Proxy\AbstractProxyFactory” “$baseDir。 “/engine/Library/doctor/Common/Proxy/AbstractProxyFactory.php”和 “/var/www/html/shop5/vendor/doctrine/common/lib/doctrine/common/Proxy/AbstractProxyFactory.php”, 第一个将被使用 我已尝试运行以下命令,但均无效:Symfony 警告:不明确的类别解析原则,symfony,doctrine-orm,composer-php,shopware,Symfony,Doctrine Orm,Composer Php,Shopware,运行composer update后,我一直出现以下错误: 警告:类解析不明确, 在中找到“条令\ORM\Persisters\Entity\BasicEntityPersister” 都是“$baseDir”。 “/engine/Library/Doctrine/ORM/Persisters/Entity/basicnitypersister.php” 和 “/var/www/html/shop5/vendor/doctrine/orm/lib/doctrine/orm/Persisters/
composer dump-autoload -o
composer clearcache
你知道如何解决这个问题吗?
多谢各位
[shopware5-php7.0]这是Shopware的正常行为 条令库经常使用
final class
语句,为了让它和类一起工作,这些语句通过composer自动加载被替换。您可以在shopware/engine/Library/doctor/Common
仅供参考:这就是为什么Shopware仅在作曲家自动加载优化时才起作用的原因
编写器转储自动加载--优化
否则,您将遇到来自无效或错误实体的随机错误。要消除这些警告,您应该在
composer.json中添加具有不明确类的文件:
"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只有在composer自动加载优化后才能工作的原因
我没有调查这是如何在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
的定义更精确
因此,如果您想以这种方式覆盖第三方类,您应该定义比第三方库更精确的名称空间。看起来您在多个地方安装了条令库,您使用的是哪一个?尝试删除你不使用的位置。这真的很糟糕。最后一个关键字有它的用途,你知道吗?@mblaetterman它意味着你不能扩展它,所以我们替换了它。在Java中,它会影响性能,但在PHP中,它只是一个契约的通信。我不知道这是好是坏。。。这显然是必要的。@FloydThreepwood重点是:这个文件非常重要,禁止扩展它,甚至更糟的是:替换它。请不要为这些事实争论。你所做的是错误的,看不到真正的解决办法。你的回答侮辱了我。这比我想象的有趣。当然,我会就这些“事实”进行辩论。应用程序不是它所包含的框架的奴隶,而是为了自己的利益而使用框架。当然,这并不意味着我们应该在这里获得免费通行证,也不是说这个选项是被严格禁止的。谢谢分享这些知识。我将使用shopware composer.json,看看是否可以解决这个问题,至少可以消除警告。正确的修复方法是修复shopware属性系统。那里有更多的工作和遗产。