php - PSR-4 自动加载不工作

标签 php laravel laravel-4 autoload psr-4

我创建了一个 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

可能导致问题的原因是什么?当我在我的本地机器上运行它时,它似乎可以工作,但我无法让它在网络服务器上工作。是否存在任何可能导致此问题的服务器配置方案?

因为我没有 shell 访问该网络服务器的权限,所以我没有在网络服务器上安装 composer,但它安装在我的本地机器上。我已经将包括 vendor 目录在内的所有文件上传到服务器。

最佳答案

来自 PSR-4 specification :

All class names MUST be referenced in a case-sensitive fashion.

因此,您需要将 modulescontrollers 文件夹分别重命名为 ModulesControllers

于是变成了:

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

我不建议将命名空间重命名为小写名称,因为这只会破坏代码和项目结构的一致性。维护和弄清楚命名空间的哪一部分需要大写,哪一部分不需要大写,这将是一件令人头疼的事情。

关于php - PSR-4 自动加载不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495987/

相关文章:

php - 如何在 sql 查询中插入 php 变量?

php - 使用 CodeIgniter 模型作为对象管理器/工厂

Laravel 5 - 没有重叠的任务计划不起作用

laravel - 如何检查 Excel 文件的第一行或第一列在 Laravel Excel 中是否有效?

unit-testing - 在 Laravel 中单元测试 Controller 而不测试路由的最佳方法是什么

php - Doctrine - 只需一次保存即可插入多行()

php - 如何交互使用PHP命令行?

php - Laravel 屈服并扩展不工作

laravel - 如何在不要求用户登录 Laravel 的情况下验证电子邮件

mysql - Laravel 4 Eager Loading 过滤并仅选择匹配结果