Php Composer自动加载问题:未加载所有文件
我已经构建了自己的web应用程序一段时间了,但是由于PHP中的一个致命错误,我完全碰上了墙 短篇故事:我正在处理项目的登录/用户部分Php Composer自动加载问题:未加载所有文件,php,composer-php,Php,Composer Php,我已经构建了自己的web应用程序一段时间了,但是由于PHP中的一个致命错误,我完全碰上了墙 短篇故事:我正在处理项目的登录/用户部分login.php处理登录信息,而student.php处理帐户信息 在尝试完成doLogin时,我遇到了一个致命错误,即student::getProfile()是一个“未定义的方法”student::getProfile()作为validate()的一部分在login类中调用 任何帮助都将不胜感激!谢谢:) 编辑:在@deceze的帮助下,我已经能够将问题缩小到
login.php
处理登录信息,而student.php
处理帐户信息
在尝试完成doLogin
时,我遇到了一个致命错误,即student::getProfile()
是一个“未定义的方法”student::getProfile()
作为validate()
的一部分在login
类中调用
任何帮助都将不胜感激!谢谢:)
编辑:在@deceze的帮助下,我已经能够将问题缩小到Composer没有自动加载所有类的事实;只有一些。有人能帮忙吗
编辑2:我选中了由Composer生成的自动加载\u classmap.php
,并列出了我所有的核心类和模型!如果它们列在类映射中,为什么Composer没有加载它们
项目目录
application/
config/
controller/
core/
(core items such as auth, app, view rendering + view controller)
model/
(speciality functions such as login, registration + user)
view/
public/
index.php
.htaccess
vendor/
autoload.php
composer.json
.htaccess
note: /public/index.php calls `require '../vendor/autoload.php';`
composer.json
"autoload": {
"psr-4": {
"": [
"application/core/",
"application/model/"
]
}
}
在经过了大量乏味的搜索之后,我在自己的方式中发现了错误——这真是太愚蠢了 我有一个名为
student
的控制器,同时还有一个名为student
的模型,因此我无意中试图调用一个技术上已经被调用的类。因此,它在第一个student
类中查找函数,而不是实际包含该特定函数的另一个类
Composer没有意识到是否已经存在一个预先声明了该名称的类,只是在PHP错误日志中没有任何条目的情况下对其进行否定
为了避免这个错误——以及将来任何进一步的类名混淆——我决定对core
类和model
类使用单独的名称空间。这将这些类划分为“子部分”,这样就允许使用命名相同的类(尽管在不同的名称空间中)
在开始时将student.php文件包含在login.php中。@deceze
调用login.php中未定义的方法student::getProfile()
应该可以。唯一的解释是没有包含该文件。只需通过添加回显“我被包含!”
来确认是否包含该文件即可。唯一的其他解释是名称空间,和/或代码中某个地方的不可见字符;i、 类或函数的名称实际上是不同的。因此,您已将问题缩小为自动加载器的问题。请相应地重写问题,以关注这一点,这不会在评论中得到解决。