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

我在新的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

假设你在配置/应用中设置了默认别名.php,那么你只需要导入正确的命名空间就是正确的。Artisan

将文件的顶部添加到以下位置:

use Artisan;

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

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

如果由于某种原因未设置别名,请使用

use Illuminate\Support\Facades\Artisan;

相反。


答案 2

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

在本例中,即 .但是,该类显然不存在于控制器的命名空间中,而是存在于 Laravel 框架命名空间中。它还具有全局命名空间中的别名。App\Http\ControllersArtisan

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

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

或者在顶部添加导入语句:

use Artisan;

推荐