Laravel Lumen 从路由调用工匠命令

Posted

技术标签:

【中文标题】Laravel Lumen 从路由调用工匠命令【英文标题】:Laravel Lumen call artisan command from route 【发布时间】:2016-04-07 16:13:33 【问题描述】:

在 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

【问题讨论】:

你收到错误了吗? 【参考方案1】:

这其实很简单。只要确保在需要的地方useArtisan Facade 类:

use Illuminate\Support\Facades\Artisan;
...
public function process()

    Artisan::call('command');

我假设正常的 Laravel 外观在默认情况下在框架中不可用,但它们是。

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

【讨论】:

正确。只要您在/bootstrap/app.php 中取消注释$app->withFacades();。此外,您可以在routes.php 中执行此操作,只要您执行use Illuminate\Support\Facades\Artisan。在这两种情况下都不需要说as Artisan 是的,绝对正确。我实际上想在 Controller 开始使用它 - Laravel 文档中的示例仅适用于 Route【参考方案2】:

这只是一个扩展,也许不是最好的方法。但是如果你只是不想使用 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 Lumen 从路由调用工匠命令的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 从路由调用工匠队列命令 - 邮递员超时

Laravel/Lumen - 如何从网站触发工作流程?

工匠迁移结果:SQLSTATE [HY000]:一般错误:LUMEN / LARAVEL 上的 1005

在 Lumen 中使用验证器进行工匠命令

laravel lumen 上的 hhvm artisan 命令很慢

如何编写工匠命令以在 Laravel 中搜索特定路线名称