在 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”的主要内容,如果未能解决你的问题,请参考以下文章