2015-05-09 175 views
3

我一直在構建我自己的網絡應用程序一段時間,但已經在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自動加載器「包含」了。 –

回答

1

太多繁瑣的搜索後,我發現了錯誤,我的方式 - 這是非常愚蠢的!

我有一個名爲student同時也有一個名爲student模式控制器,因此我無意中試圖調用是在技術上已經被人們稱爲類。因此,它正在尋找功能類的第一個student類,而不是實際包含該特定功能的其他類。

如果已經有一個預先聲明瞭該名稱的類,Composer就沒有意識到,只是在沒有任何輸入的PHP錯誤日誌中否定它。

爲了避免這個錯誤 - 以及未來任何進一步的類名混搭 - 我決定對core類和model類使用單獨的命名空間。這樣可以將這些類分離爲「子部分」,從而允許使用相同的類(雖然在不同的名稱空間中)。


PHP Manual: Namespaces

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

相關問題