【问题标题】: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);
        }

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

【问题讨论】:

    标签: php laravel namespaces laravel-5 laravel-artisan


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 2015-06-24
      • 2015-05-21
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2015-07-21
      • 2018-01-03
      相关资源
      最近更新 更多