Laravel Lumen 从路由调用 artisan 命令
Laravel Lumen call artisan command from route
在 Laravel 中,I can do this 从路由调用 Artisan
命令:
Route::get('/foo', function () {
$exitCode = Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
});
但是我在 Lumen 框架中找不到一个明显的方法来做到这一点。抛出的错误是:
Fatal error: Class 'App\Http\Controllers\Artisan' not found
这个其实很简单。只要确保在需要的地方 use
Artisan Facade
class:
use Illuminate\Support\Facades\Artisan;
...
public function process()
{
Artisan::call('command');
}
我假设正常的 Laravel facades 在默认情况下在框架中不可用,但它们是。
此外,在 bootstrap/app.php
中,$app->withFacades();
必须取消注释,因为 @tptcat 在评论中提醒了我。
这只是一个扩展,可能不是最好的方法。但是,如果您只是不想使用 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');
在 Laravel 中,I can do this 从路由调用 Artisan
命令:
Route::get('/foo', function () {
$exitCode = Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
});
但是我在 Lumen 框架中找不到一个明显的方法来做到这一点。抛出的错误是:
Fatal error: Class 'App\Http\Controllers\Artisan' not found
这个其实很简单。只要确保在需要的地方 use
Artisan Facade
class:
use Illuminate\Support\Facades\Artisan;
...
public function process()
{
Artisan::call('command');
}
我假设正常的 Laravel facades 在默认情况下在框架中不可用,但它们是。
此外,在 bootstrap/app.php
中,$app->withFacades();
必须取消注释,因为 @tptcat 在评论中提醒了我。
这只是一个扩展,可能不是最好的方法。但是,如果您只是不想使用 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');