流明:使用全新安装找不到App\Http\Controllers\Controller类

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)

我认为这与命名空间有关,但我无法弄明白.有线索吗?

谢谢,

Sta*_*ers 5

唉,这些都不能可靠地工作。我不能相信这个解决方案,但如果你来这里寻找一个有效的答案,请给这个答案点赞。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)


kev*_*ius 2

解决方案是链接到正确的基本控制器,以便它可以扩展该类。

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)