laravel - 如何在包中安排 Artisan 命令?

标签 laravel console laravel-5 laravel-artisan

我有一个包含 Artisan 命令的包。我已经通过我的服务提供商向 Artisan 注册了这些命令,如下所示:

/**
 * Register the application services.
 *
 * @return void
 */
public function register()
{
    // Register Amazon Artisan commands
    $this->commands([
        'App\Marketplace\Amazon\Console\PostProductData',
        'App\Marketplace\Amazon\Console\PostProductImages',
        'App\Marketplace\Amazon\Console\PostProductInventory',
        'App\Marketplace\Amazon\Console\PostProductPricing',
    ]);
}

但是,这些命令需要安排为每天运行。

我知道在 应用程序/控制台/Kernel.php schedule()您可以在其中注册命令及其频率的方法,但是如何在我的包的服务提供者中安排命令呢?

最佳答案

花了很多调试和阅读 Laravel 的源代码来解决这个问题,但结果证明它非常简单。诀窍是等到应用程序启动后调度命令,因为那是 Laravel 定义 Schedule 的时候。实例,然后在内部调度命令。希望这可以为某人节省几个小时的痛苦调试!

use Illuminate\Support\ServiceProvider;
use Illuminate\Console\Scheduling\Schedule;

class ScheduleServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->app->booted(function () {
            $schedule = $this->app->make(Schedule::class);
            $schedule->command('some:command')->everyMinute();
        });
    }

    public function register()
    {
    }
}

关于laravel - 如何在包中安排 Artisan 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30456737/

相关文章:

Laravel 5.6 getRouteKeyName() 不起作用

java - H2 数据存储 : how to execute console from Java app?

console - Console.writeline()/trace.writeline() 之间的区别

php - 如何在Laravel中流式传输视频

mysql - 将 Laravel 应用程序连接到另一个数据库 - Laravel 5.8

laravel - 覆盖 laravel 中的登录身份验证

laravel - Laravel Eloquent获得与keyBy的关系

laravel - laravel 中的 "Please provide a valid cache path"错误

c++ - 通过按空格键结束键盘输入数据,而不是输入键 c/c++

laravel-5 - 包裹被遗弃了怎么去除呢?