流明:全新安装时找不到 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-&gt;withFacades(); $app-&gt;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-&gt;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”依赖项”

安装tensorflow时找不到版本[重复]

为啥致命错误:安装 PyYAML 时找不到“yaml.h”文件?

为啥我使用 setup.py 安装时找不到 ansible?

安装grid时找不到ASM共享磁盘