Class 'App\Http\Controllers\Artisan' 在 Laravel 5 中找不到

Class 'App\Http\Controllers\Artisan' not found in Laravel 5

我在新 Laravel 并尝试通过编码来学习。我创建了 migration 和 seed,当我从终端调用它们时都工作正常,但我想在我的 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);
        }

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

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

在文件顶部添加:

use Artisan;

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

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

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

use Illuminate\Support\Facades\Artisan;

相反。

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

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

您可以通过在根命名空间前加上反斜杠来引用别名:

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

或在顶部添加导入语句:

use Artisan;