作曲家自动加载时遇到问题:没有加载所有文件

问题描述:

我一直在构建我自己的网络应用程序一段时间,但已经在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/" 
     ] 
    } 
} 
+0

包括在开始内部的login.php该student.php文件。 –

+0

@deceze调用未定义的方法student :: getProfile()在login.php中 –

+0

@ jQuery.PHP.Magento.com它已经使用Composer的PSR-4自动加载器“包含”了。 –

太多繁琐的搜索后,我发现了错误,我的方式 - 这是非常愚蠢的!

我有一个名为student同时也有一个名为student模式控制器,因此我无意中试图调用是在技术上已经被人们称为类。因此,它正在寻找功能类的第一个student类,而不是实际包含该特定功能的其他类。

如果已经有一个预先声明了该名称的类,Composer就没有意识到,只是在没有任何输入的PHP错误日志中否定它。

为了避免这个错误 - 以及未来任何进一步的类名混搭 - 我决定对core类和model类使用单独的命名空间。这样可以将这些类分离为“子部分”,从而允许使用相同的类(虽然在不同的名称空间中)。


PHP Manual: Namespaces

Sitepoint: How to Use PHP Namespaces, Part 1: The Basics