Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

composer 1.x报PHP Fatal error: Uncaught ReflectionException: Class think\Config does not exist 问题 #16

Open
nick-bai opened this issue Feb 19, 2021 · 0 comments

Comments

@nick-bai
Copy link

如果你用的是

composer require zzstudio/think-addons

基本不会出现任何问题。但是如果你fork了一个自己的版本,再去 composer,而且你的 composer版本又是1.x的情况下,就可能出现在执行 服务发现的时候

php think service:discover

报出 think\Config类找不到。先说一下导致这个问题的原因。也困扰了一个上午,我相信肯定有同样困惑的同学。

问题原因:
1、composer 版本所致
2、包下名为config.php所致

解释:
composer 1.x 在处理同命名空间的文件的时候,注册的顺序,影响他查找的顺序。本包的命名空间也是think 再加上,如果你的名字,比如我的nickbai。字母n排在thinkphp的t前面。注册时候,也是排在 tp的think前面。composerautoload_psr4.php有如下的代码

'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'),

很显然本包在不改的情况下,字母z注册在最后,肯定没问题。但是如果你的名字在 t 之前,那恭喜你,你中招了。再执行自动加载的时候,会去找包下的config.php 而不会去找tp的config类。

既然问题找到了,那说一下解决方案吧。
1、升级composer 为 2.x
这里注意一下,tp5.1等早期的版本有不兼容 composer 2.x 的问题。慎重考虑。

2、修改 config.php 为别的名字,并且修改 /src/addons/command/SendConfig.php 第 44 行为对应的名称。

好了,希望这个分享能给需要的人提供点帮助,少走一点弯路。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant