kev*_*ius 5 php router class laravel lumen
我正在使用全新安装的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
Run Code Online (Sandbox Code Playgroud)
这是app/Http/routes.php中的路由器
$app->get('/', 'MomentController@index');
Run Code Online (Sandbox Code Playgroud)
这是我班在app/HTTP /控制器/ MomentController.php
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MomentController extends Controller {
public function index()
{
echo 123;
}
}
Run Code Online (Sandbox Code Playgroud)
我在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"
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这与命名空间有关,但我无法弄明白.有线索吗?
谢谢,
唉,这些都不能可靠地工作。我不能相信这个解决方案,但如果你来这里寻找一个有效的答案,请给这个答案点赞。Lukas Geiter 的原帖在这里:流明框架路由不起作用
我确实更改了 foo/bar 示例,因为真的,谁真的喜欢这样?
您必须使用完全限定的类名:
$app->get('/', 'App\Http\Controllers\HomeController@index');
Run Code Online (Sandbox Code Playgroud)
或将所有路线包装在一个组中(这实际上是 Laravel 5 中的幕后完成方式)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'HomeController@index');
$group->get('users', 'UserController@index');
});
Run Code Online (Sandbox Code Playgroud)
解决方案是链接到正确的基本控制器,以便它可以扩展该类。
use Laravel\Lumen\Routing\Controller as BaseController;
Run Code Online (Sandbox Code Playgroud)
为了使其工作,我必须添加这一行。
所以完整的类就变成这样了:
<?php namespace App\Http\Controllers;
use Laravel\Lumen\Routing\Controller as BaseController;
class ChannelController extends BaseController {
public function getChannels(){}
public function getChannel(){}
}
Run Code Online (Sandbox Code Playgroud)