运行作曲家更新后,我一直有以下错误:
警告:类别分辨率模糊, 发现了“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
知道如何解决这个问题吗? 谢谢
[shopware5 - php7.0]
答案 0 :(得分:3)
这是Shopware的正常行为。
Doctrine库经常使用final class
语句,为了使它与Shopware attribute system一起工作,这些类被作曲家自动加载所取代。您可以在shopware/engine/Library/Doctrine/Common
仅供参考:这就是Shopware仅在优化了编辑器自动加载时才能工作的原因。
composer dump-autoload --optimize
其他你会遇到无效或错误实体的随机错误。
答案 1 :(得分:1)
要摆脱这些警告,您应该在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"
]
},
中将含有不明确类别的文件添加到exclude-from-classmap
:
dump-autoload
然后"autoload": {
"psr-0": {
"somevendor\\somepackage\\": "vendor/somevendor/somepackage/",
"somevendor\\somepackage\\db\\": "overrides/somevendor/somepackage/db/"
}
},
会忽略这些文件。
这就是Shopware仅在优化了编辑器自动加载时才能工作的原因。
我没有调查在Shopware中如何做到这一点,但这也可以修复/改进。对于作曲家,名称空间的更精确定义具有优先权。所以如果你在自动加载中有这个:
somevendor\somepackage\db\Entity
如果您要求overrides/somevendor/somepackage/db/Entity.php
课程,作曲家将首先在vendor/somevendor/somepackage/db/Entity.php
中进行搜索,并且只有在找不到它时,才会尝试somevendor\somepackage\db
。这是因为somevendor\somepackage
命名空间的定义比Vigenère cipher in pure bash
#!/usr/local/bin/bash
# vigenere.sh
# http://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
[[ "${*/-d/}" != "" ]] &&
echo "Usage: $0 [-d]" && exit 1
m=${1:+-}
printf "string: ";read t
printf "keyphrase: ";read -s k
printf "\n"
for ((i=0;i<${#t};i++)); do
p1=${a%%${t:$i:1}*}
p2=${a%%${k:$((i%${#k})):1}*}
d="${d}${a:$(((${#p1}${m:-+}${#p2})%${#a})):1}"
done
echo "$d"
更精确。
因此,如果您想以这种方式覆盖第三方类,则应该定义比第三方库更精确的名称空间。