Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 警告:不明确的类别解析原则_Symfony_Doctrine Orm_Composer Php_Shopware - Fatal编程技术网

Symfony 警告:不明确的类别解析原则

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 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”, 第一个将被使用

我已尝试运行以下命令,但均无效:

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属性系统。那里有更多的工作和遗产。