[英]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規格 :
必須以區分大小寫的方式引用所有類名。
因此,您需要將modules
和controllers
文件夾分別重命名為Modules
和Controllers
。
所以它變成:
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.