[英]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.