2016-01-04 46 views
4

在Laravel,I can do this从路由调用Artisan命令:Laravel流明调用命令工匠从路线

Route::get('/foo', function() { 
    $exitCode = Artisan::call('email:send', [ 
     'user' => 1, '--queue' => 'default' 
    ]); 

    // 
}); 

但我不能找到一个明显的方式在管腔框架来做到这一点。抛出的错误是:

Fatal error: Class 'App\Http\Controllers\Artisan' not found 
+0

你得到一个错误? – tptcat

回答

8

这其实很简单。只是一定要useArtisan Facade类需要的地方:

use Illuminate\Support\Facades\Artisan; 
... 
public function process() 
{ 
    Artisan::call('command'); 
} 

我认为正常的Laravel外墙没有提供默认的框架,但他们。

另外,在bootstrap/app.php,$app->withFacades();必须注释为@tptcat在评论中提醒我。

+1

正确。只要你在'/ bootstrap/app.php'中取消'$ app-> withFacades();'的注释。此外,只要您使用Illuminate \ Support \ Facades \ Artisan',就可以在'routes.php'中执行此操作。在这两种情况下都不需要说'作为工匠'。 – tptcat

+0

是的,绝对正确。我实际上想在'Controller'中使用它 - 首先Laravel文档中的示例仅用于“Route”。 –

3

这只是一个扩展,也许不是最好的方法。但是如果你只是不想使用Facade的方式呢?那么你可以通过Illuminate\Contracts\Console\Kernel来完成。

// See what Artisan facade provides in `Illuminate\Support\Facades\Artisan` 
// and thats: `Illuminate\Contracts\Console\Kernel` 
app('Illuminate\Contracts\Console\Kernel')->call('command'); 

或创建的Illuminate\Contracts\Console\Kernel别名:

// In your service provider or bootstrap/app.php create the alias 
$this->app->alias('arti', 'Illuminate\Contracts\Console\Kernel'); 

// now the 'artisan' alias is available in the container 
app('arti')->call('command');