流明:全新安装时找不到 App\Http\Controllers\Controller 类
Posted
技术标签:
【中文标题】流明:全新安装时找不到 App\\Http\\Controllers\\Controller 类【英文标题】:lumen: App\Http\Controllers\Controller class not found with fresh install流明:全新安装时找不到 App\Http\Controllers\Controller 类 【发布时间】:2015-10-30 12:05:12 【问题描述】:我正在使用 Lumen 的 全新安装(构建 Web API),大多数事情都可以正常工作,但是当我尝试使用路由器指向一个类时,我收到此错误:
Fatal error: Class 'App\Http\Controllers\Controller' not found in /Applications/MAMP/htdocs/moments/lumen/app/Http/Controllers/MomentController.php on line 5
这是我在 app/Http/routes.php 中的路由器
$app->get('/', 'MomentController@index');
这是我在 app/Http/Controllers/MomentController.php 中的 class
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MomentController extends Controller
public function index()
echo 123;
我已经在bootstrap/app.php中激活了这些组件:
$app->withFacades();
$app->withEloquent();
Dotenv::load(__DIR__.'/../');
这是我的 composer.json 文件:
"name": "laravel/lumen",
"description": "The Laravel Lumen Framework.",
"keywords": ["framework", "laravel", "lumen"],
"license": "MIT",
"type": "project",
"require":
"laravel/lumen-framework": "5.1.*",
"vlucas/phpdotenv": "~1.0"
,
"require-dev":
"phpunit/phpunit": "~4.0",
"fzaninotto/faker": "~1.0"
,
"autoload":
"psr-4":
"App\\": "app/"
,
"classmap": [
"database/"
]
,
"autoload-dev":
"classmap": [
"tests/"
]
,
"config":
"preferred-install": "dist"
我认为这与命名空间有关,但我无法弄清楚。有什么线索吗?
谢谢,
【问题讨论】:
但是Controller类不是lumen应该加载的内部类吗?我的 app/Http/Controllers/ 文件夹(MomentsController.php 和 MomentsController 类)中只有 1 个文件和 1 个类。谢谢你的时间...... 如果我删除“扩展控制器”然后我得到 echo 123 输出并且没有错误。所以它显然没有找到基本的控制器类。 【参考方案1】:唉,这些都不可靠。我不能将解决方案归功于该解决方案,但如果您来这里寻找可行的答案,请投票赞成这个。 Lukas Geiter 的原帖在这里:lumen framework routing not working
我确实更改了 foo/bar 示例,因为真的,谁真正喜欢它?
您必须使用完全限定的类名:
$app->get('/', 'App\Http\Controllers\HomeController@index');
或将所有路由包装在一个组中(这实际上是在 Laravel 5 的底层实现的)
$app->group(['namespace' => 'App\Http\Controllers'], function($group)
$group->get('/', 'HomeController@index');
$group->get('users', 'UserController@index');
);
【讨论】:
出于某种原因,这个答案得到的反对票与赞成票一样多。如果您投反对票,请解释原因!也许它会帮助别人:)【参考方案2】:删除use App\Http\Controllers\Controller;
,因为没有必要这样做。
然后检查您的 composer.json 是否为 app
目录启用了 psr-4。
另外,尝试在命令行上使用composer du
转储并重新生成自动加载文件。
【讨论】:
好的,用一些额外的可能的东西来检查/尝试更新答案。 我更改了帖子以添加 composer.json 数据。我也做了一个 composer dump-autoload 但仍然没有运气。 嗯,好吧,我唯一能想到的就是尝试删除app.php
中的$app->withFacades();
,看看是否能解决问题。【参考方案3】:
解决方案是链接到正确的基本控制器,以便它可以扩展该类。
use Laravel\Lumen\Routing\Controller as BaseController;
这一行是我唯一必须添加才能使其工作的内容。
所以完整的类变成了这样:
<?php namespace App\Http\Controllers;
use Laravel\Lumen\Routing\Controller as BaseController;
class ChannelController extends BaseController
public function getChannels()
public function getChannel()
【讨论】:
很好,您在回答广泛问题时帮我解决了这个问题! (没看到的,都是一模一样的反应)【参考方案4】:我假设您使用lumen new
而不是composer create-project laravel/lumen --prefer-dist
创建了一个项目。您可以尝试使用 composer 创建一个新的 lumen 项目并尝试重现此问题。
【讨论】:
【参考方案5】:对于最终遇到同样问题的其他人。我在安装新的 Lumen 5.2 时遇到了同样的问题。
在网上搜索了几个小时后发现 Lumen 使用的路由控制器与 Laravel 使用的不同。 Lumen 使用 nikic fastroute。
Lumen 路由控制器不支持路由组前缀,即使它在 Lumen 的文档中列出。我不知道这是否是原始海报的问题,因为完整的路线详细信息不可用,但希望它可以为其他人节省几个小时。
如果这是一个需要手动启用/添加的功能(如果 Lumen 现在按照文档建议支持它),我无法找到任何参考。也许有人可以对此有所了解?
https://lumen.laravel.com/docs/5.2/routing#route-group-prefixes
【讨论】:
【参考方案6】:试试这个
$app->get('/', 'App\Http\Controllers\MomentController@index');
或(更好)将它们分组
$app->group(['namespace' => 'App\Http\Controllers'], function($group)
$group->get('/', 'MomentController@index');
$group->get('foo', 'MomentController@otherAction');
);
并删除use App\Http\Controllers\Controller;
如@lowerends所说的
【讨论】:
现在我得到:类 App\Http\Controllers\App\Http\Controllers\MomentController 不存在 您不想为控制器放置整个命名空间路径,因为 Lavael 已经设置将控制器的命名空间处理为App\Http\Controllers
以上是关于流明:全新安装时找不到 App\Http\Controllers\Controller 类的主要内容,如果未能解决你的问题,请参考以下文章
Vue WSL Ubuntu - 在新应用程序中删除 HelloWorld.vue 组件时找不到“HelloWorld.vue”依赖项”
为啥致命错误:安装 PyYAML 时找不到“yaml.h”文件?