簡體   English   中英

PSR-4自動加載不起作用

[英]PSR-4 autoloading not working

我創建了一個app/modules目錄,並使用PSR-4自動加載它,如下所示:

"psr-4": {
    "Modules\\": "app/modules"
}

而且我也做了composer dumpautoload 我有以下目錄結構:

app
- ...
- modules
-- ModuleName
--- controllers
---- BackendController.php
...

文件BackendController.php具有命名空間Modules\\ModuleName\\Controllers

routes.php ,我有以下內容:

Route::resource('backend/modules/module-name', 'Modules\ModuleName\Controllers\BackendController');

但每當我嘗試訪問'backend / modules / module-name'時,我會收到一個ReflectionException其中包含以下消息:

Class Modules\ModuleName\Controllers\BackendController does not exist

可能導致問題的原因是什么? 當我在我的本地機器上運行它時,它似乎工作,但我不能讓它在Web服務器上工作。 是否存在任何可能導致此問題的服務器配置方案?

由於我沒有對該Web服務器的shell訪問權限,因此我沒有在Web服務器上安裝composer,但它安裝在我的本地計算機上。 我已將包括vendor目錄在內的所有文件上傳到服務器。

PSR-4規格

必須以區分大小寫的方式引用所有類名。

因此,您需要將modulescontrollers文件夾分別重命名為ModulesControllers

所以它變成:

app
- ...
- Modules
-- ModuleName
--- Controllers
---- BackendController.php
...

我不建議將名稱空間重命名為小寫名稱,因為這會破壞代碼和項目結構的一致性。 維護並弄清楚命名空間的哪一部分需要大寫,而哪一部分不需要,這將是一個令人頭痛的問題。

你應該看看大寫。

可能你是在Windows機器上測試它的路徑

'Modules\ModuleName\Controllers\BackendController'

是相同的

'modules\ModuleName\controllers\BackendController'

但在Linux上,它們是兩條不同的路徑。 您應該更改您的routes.php

Route::resource('backend/modules/module-name', 'Modules\ModuleName\Controllers\BackendController');

Route::resource('backend/modules/module-name', 'modules\ModuleName\controllers\BackendController');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM