在 Laravel 5 中找不到类“App\Http\Controllers\Artisan”

Posted

技术标签:

【中文标题】在 Laravel 5 中找不到类“App\\Http\\Controllers\\Artisan”【英文标题】:Class 'App\Http\Controllers\Artisan' not found in Laravel 5在 Laravel 5 中找不到类“App\Http\Controllers\Artisan” 【发布时间】:2015-07-12 19:47:12 【问题描述】:

我在新的 Laravel 并尝试通过编码来学习。我创建了迁移和种子,当我从终端调用它们时,它们都工作正常,但我想在我的 HomeController 中尝试这段代码,但我得到了一个很大的错误。

错误

FatalErrorException in HomeController.php line 23: 
Class 'App\Http\Controllers\Artisan' not found

家庭控制器中的代码

$hasTable = Schema::hasTable('users');      

if ($hasTable==0)
        
            echo "call cli to migration and seed";

            $migrate = Artisan::call('migrate');
            $seed = Artisan::call('db:seed');

            echo "Migrate<br>";

            print_r($migrate);
            echo "Seed<br>";
            print_r($seed);
        

我相信,如果我加载了正确的命名空间,我可以避免这个错误,但我不确定。

【问题讨论】:

【参考方案1】:

假设您在 config/app.php 中设置了默认的 Artisan 别名,那么您是对的,您只需要导入正确的命名空间。

要么添加文件的顶部:

use Artisan;

或者在您的代码中使用完全限定的命名空间:

$migrate = \Artisan::call('migrate');

如果您出于某种原因没有设置别名,请使用

use Illuminate\Support\Facades\Artisan;

改为。

【讨论】:

为什么/在这里use \Artisan; use \Illuminate\Support\Facades\Artisan; 是过度的,因为Artisan 是 Laravel 中的别名。 @limonte 您错过了该代码正上方的段落:如果您出于某种原因没有设置别名。如果缺少该别名(这是完全合理的,它在用户控制的代码中),use Artisan\Artisan::... 会给你一个很好的致命错误 谢谢@Clive。它当然有帮助:) Lumen 似乎没有 Artisan 别名,所以这对我很有帮助。谢谢!【参考方案2】:

当您仅引用 Artisan::call('db:seed') 之类的类时,PHP 会在您的 当前命名空间 中搜索该类。

在本例中为App\Http\Controllers。但是 Artisan 类显然不存在于控制器的命名空间中,而是存在于 Laravel 框架命名空间中。它还有一个位于 global 命名空间中的别名。

您可以通过添加反斜杠来引用根命名空间中的别名:

return \Artisan::call('db:seed');

或者在顶部添加import语句:

use Artisan;

【讨论】:

以上是关于在 Laravel 5 中找不到类“App\Http\Controllers\Artisan”的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5 中找不到助手类

在 Laravel 5 中找不到用户类

在 laravel 5 中找不到类控制器

在 Laravel 5 中找不到类“App\Http\Controllers\Artisan”

在基本 Laravel 5.4 教程中找不到类“任务”

在 Laravel 5.2 中找不到类“App\Http\Controllers\Session”[重复]