作曲家自动加载时遇到问题:没有加载所有文件
问题描述:
我一直在构建我自己的网络应用程序一段时间,但已经在PHP中发生了致命错误。作曲家自动加载时遇到问题:没有加载所有文件
小故事:我正在处理项目的登录/用户部分。 login.php
处理登录的东西,而student.php
处理帐户的东西。
当试图完成doLogin
时,我达到致命错误状态student::getProfile()
是一个“未定义的方法”。 student::getProfile()
在login
类中被称为validate()
的一部分。
任何援助将不胜感激!谢谢:)
编辑:随着@deceze的帮助下,我已经能够缩小问题下的事实,作曲是不是自动加载所有我的课;只有一些。任何人都可以协助?
编辑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/"
]
}
}
答
太多繁琐的搜索后,我发现了错误,我的方式 - 这是非常愚蠢的!
我有一个名为student
同时也有一个名为student
模式控制器,因此我无意中试图调用是在技术上已经被人们称为类。因此,它正在寻找功能类的第一个student
类,而不是实际包含该特定功能的其他类。
如果已经有一个预先声明了该名称的类,Composer就没有意识到,只是在没有任何输入的PHP错误日志中否定它。
为了避免这个错误 - 以及未来任何进一步的类名混搭 - 我决定对core
类和model
类使用单独的命名空间。这样可以将这些类分离为“子部分”,从而允许使用相同的类(虽然在不同的名称空间中)。
包括在开始内部的login.php该student.php文件。 –
@deceze调用未定义的方法student :: getProfile()在login.php中 –
@ jQuery.PHP.Magento.com它已经使用Composer的PSR-4自动加载器“包含”了。 –