我现在已经构建了一个我自己的网络应用程序了一段时间,但是在PHP中发生致命错误已经完全碰到了墙。
简短的故事:我正在研究项目的登录/用户部分。 login.php
处理登录内容,而student.php
处理帐户内容。
在尝试完成doLogin
时,我实现了致命错误,即student::getProfile()
是一种“未定义的方法”。 student::getProfile()
在validate()
类中被称为login
的一部分。
非常感谢任何帮助!谢谢:))
编辑:在@deceze的帮助下,我已经能够将问题缩小到这样一个事实,即Composer不会自动加载我所有的类;只有一些。有人能帮忙吗?
编辑2:我检查了由Composer生成的autoload_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/"
]
}
}
答案 0 :(得分:1)
经过多次乏味的搜索,我发现了我的错误 - 而且非常愚蠢!
我有一个名为student
的控制器,同时还有一个名为student
的模型,因此我无意中试图调用一个技术上已被调用的类。因此,它在函数的第一个student
类中查找,而不是实际包含该特定函数的另一个类。
如果已经预先声明了具有该名称的类,那么Composer并没有意识到,并且只是在PHP错误日志中没有任何条目的情况下否定它。
为了避免这个错误 - 以及将来任何进一步的类名混淆 - 我决定为core
类和model
类使用单独的命名空间。这将这些类分为“子”部分'因此,允许使用相同的类(尽管在不同的命名空间中)。