我正在使用全新安装的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中的类
<?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"
}
}
我认为它与命名空间有关,但我无法弄明白。有线索吗?
THX,
答案 0 :(得分:4)
我确实改变了foo / bar的例子,因为真的,谁真的喜欢它?
您必须使用完全限定的类名:
$app->get('/', 'App\Http\Controllers\HomeController@index');
OR 包装一个组中的所有路线(这实际上是在Laravel 5中引导它的方式)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'HomeController@index');
$group->get('users', 'UserController@index');
});
答案 1 :(得分:2)
解决方案是链接到正确的基本控制器,以便它可以扩展该类。
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(){}
}
答案 2 :(得分:2)
我认为您使用lumen new
代替composer create-project laravel/lumen --prefer-dist
创建了一个项目。您可以尝试使用composer创建一个新的流明项目,并尝试重现此问题。
答案 3 :(得分:0)
删除use App\Http\Controllers\Controller;
,因为没有必要。
然后检查你的composer.json是否为app
目录启用了psr-4。
此外,在命令行上尝试composer du
以转储和重新生成自动加载文件。
答案 4 :(得分:0)
对于那些在此结束时遇到同样问题的人。我在新鲜的Lumen 5.2安装中删除路线时遇到了同样的问题。
经过几个小时的网络搜索,结果发现路线控制器Lumen使用的不同于Laravel使用的路线控制器。 Lumen使用nikic fastroute。
Lumen路由控制器不支持路由组前缀,即使它已在流明文档中列出。我不知道这是否是原始海报的问题,因为没有完整的路线详情,但希望它可以在几个小时内为其他人节省。
如果这是一个需要手动启用/添加的功能,我仍然无法找到任何参考(如果Lumen现在支持它,如文档所示)。也许有人可以对此有所了解?
https://lumen.laravel.com/docs/5.2/routing#route-group-prefixes
答案 5 :(得分:-3)
试试这个
$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