Composer自动加载出现问题:未加载所有文件

时间:2015-05-09 12:57:29

标签: php composer-php

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

1 个答案:

答案 0 :(得分:1)

经过多次乏味的搜索,我发现了我的错误 - 而且非常愚蠢!

我有一个名为student的控制器,同时还有一个名为student的模型,因此我无意中试图调用一个技术上已被调用的类。因此,它在函数的第一个student类中查找,而不是实际包含该特定函数的另一个类。

如果已经预先声明了具有该名称的类,那么Composer并没有意识到,并且只是在PHP错误日志中没有任何条目的情况下否定它。

为了避免这个错误 - 以及将来任何进一步的类名混淆 - 我决定为core类和model类使用单独的命名空间。这将这些类分为“子”部分'因此,允许使用相同的类(尽管在不同的命名空间中)。

PHP Manual: Namespaces

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