未找到Laravel 4.2 vendor / package / src / controllers目录中的Controller类

时间:2015-05-08 20:40:21

标签: php laravel-4 laravel-routing

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}}

我个人不介意将我的控制器类更深入地保存在树中,如果它需要的是什么,但这似乎不是常规,所以我想我一定会遗漏一些东西。我很欣赏任何想法。很高兴发布代码和配置文件的其他部分,如果这将有所帮助。感谢。

1 个答案:

答案 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