与this poster类似,我正在尝试使用Laravel供应商文件夹中的控制器。 (我已经按照该答案中给出的所有建议和其他几个类似的建议。)作为一个简化的案例,考虑一个形状如下的Laravel供应商项目目录:
overflow:hidden
我在项目目录和Laravel根目录中运行composer dump-autoload,但是当我运行" php artisan routes"我得到了这个投诉:
vendor
marvel
avengers
composer.json
composer.lock
src
controllers
HulkController.php
Marvel
Avengers
AvengersServiceProvider.php
routes.php
另一方面,如果我移动" HulkController.php"进入src / Marvel / Avengers目录(以及#34; AvengersServiceProvider.php")并再次转储自动加载,然后" php artisan routes"很高兴和路线到HulkController工作。
我已经将src / controllers添加到composer.json文件中的classmap中,所以我不认为这是问题所在:
{"error":{"type":"ReflectionException","message":
"Class Marvel\\Avengers\\HulkController does not exist",
"file":"C:\\wamp\\www\\marvel\\vendor\\laravel\\framework\\src\\
Illuminate\\Routing\\ControllerInspector.php","line":28}}
我个人不介意将我的控制器类更深入地保存在树中,如果它需要的是什么,但这似乎不是常规,所以我想我一定会遗漏一些东西。我很欣赏任何想法。很高兴发布代码和配置文件的其他部分,如果这将有所帮助。感谢。
答案 0 :(得分:2)
您的命名空间与您告诉Composer自动加载的名称空间不匹配。您说“我的源文件夹是src/
”,然后说“HulkController
位于Marvel\Avengers
命名空间中,您刚才说的是...... src/
。然后你在控制器文件夹中有控制器 - 你说的那个不是,因此找不到它。
将控制器移动到src/
文件夹可以正常工作,因为这正是您所说的那样。
如果将命名空间更改为Marvel\Avengers\Controllers\HulkController
,请将控制器文件夹名称大写,然后在将该控制器引用到该命名空间的任何位置进行更新,然后它就可以正常工作。
另一种方法是切换到使用PSR-4而不是PSR-0,因为PSR-0对PSR-4没有的目录结构做出了这些假设。
您可以在此处查看有关此内容的更多信息:https://getcomposer.org/doc/01-basic-usage.md