【发布时间】:2015-07-19 21:11:05
【问题描述】:
类似于this poster,我正在尝试使用位于 Laravel 供应商文件夹中的控制器。 (我已经遵循了该答案中给出的所有建议以及其他几个类似的建议。)作为一个简化案例,考虑一个 Laravel 供应商项目目录,其形状如下:
vendor
marvel
avengers
composer.json
composer.lock
src
controllers
HulkController.php
Marvel
Avengers
AvengersServiceProvider.php
routes.php
我在项目目录和 Laravel 根目录中都运行了 composer dump-autoload,但是当我运行“php artisan routes”时,我得到了这个抱怨:
{"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}}
另一方面,如果我将“HulkController.php”移动到 src/Marvel/Avengers 目录(与“AvengersServiceProvider.php”一起)并再次转储自动加载,那么“php artisan routes " 很高兴并且通往 HulkController 的路线工作。
我已经在 composer.json 文件的类映射中添加了 src/controllers,所以我认为这不是问题:
{
"name": "marvel/avengers",
"description": "Earth's Mightiest Heroes",
"authors": [
{
"name": "Stan Lee"
}
],
"require": {
"php": ">=5.4.0",
"illuminate/support": "4.2.*"
},
"autoload": {
"classmap": [
"src/controllers"
],
"psr-0": {
"Marvel\\Avengers": "src/"
}
}
}
如果需要的话,我个人不介意让我的控制器类在树中更深,但这似乎不是惯例,所以我认为我一定遗漏了一些东西。我会很感激任何想法。如果有帮助,很高兴发布代码和配置文件的其他部分。谢谢。
【问题讨论】:
-
尝试将 psr-0 切换到 psr-4
-
嗯...现在它告诉我它找不到我的服务提供者类。
-
看看Seer提供的答案,它更深入。另请查看this 以了解 PSR-0 和 PSR-4 之间的差异
标签: php laravel-4 laravel-routing