laravel 在工作日(节假日除外)运行调度程序命令

28 篇文章 0 订阅

wpcmf: wpcmf cms ,内容管理系统,类似 wordpress 系统

Laravel 有一些非常有用的方法可以让我们自定义何时执行命令。不幸的是,有时我们需要更多的控制,而 Laravel 并没有开箱即用。

例如,当您需要每个工作日执行命令时这意味着每个工作日,但不包括假期。您不希望您的同事(或您自己)在圣诞节早上收到每天的电子邮件。

在本文中,我将向您展示如何做到这一点。

避开周末

Laravel 默认自带 helper 方法weekdays来配置 schedule 命令只在工作日执行。假设我们有一个带有签名的命令send:daily-email,并且我们希望这个命令只在工作日(周一到周五)发送,我们可以通过将它添加到我们schedule的控制台内核中的方法来很容易地做到这一点:

// app/Console/Kernel.php

class Kernel extends ConsoleKernel
{
    //...
    
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('send:daily-email')->weekdays();
    }
    
    //...
}

就是这样,我们只需要调用weekdays命令上的方法,Laravel 只会在工作日自动执行它。

现在我们有工作日了。我们需要弄清楚如何确保 Laravel 跳过假期。

跳过假期

为此,我们将在 schedule 命令中使用 skip 方法。此方法执行作为参数传递的函数,如果该函数返回 true,则跳过该执行。这样我们就可以检查当天是否是假期。

现在我们需要弄清楚今天是不是假期。有很多方法可以做到这一点,但是有一个库可以通过向 Carbon 添加一个 mixin 来帮助我们解决这个问题。您可以在此处阅读更多相关信息:https ://github.com/kylekatarnls/business-day

使用 composer 安装库:

composer require cmixin/business-day

安装后,我们需要在服务提供者中启用 mixin。AppServiceProvider 是一个很好的地方。

// app/Providers/AppServiceProvider.php


use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Carbon;
use Cmixin\BusinessDay;

class AppServiceProvider extends ServiceProvider
{
    // ... 
    
    public function boot()
    {
        BusinessDay::enable(Carbon::class);
    }
}

boot服务提供者的方法中,我们调用类的enable方法BusinessDay,它是我们刚刚安装的库的一部分。我们还需要传递我们将添加额外方法的类。Illuminate\Support\Carbon

现在我们需要告诉图书馆我们正在使用哪个地区的假期。您可以在此处找到所有支持的区域:https ://github.com/kylekatarnls/business-day/tree/master/src/Cmixin/Holidays

例如,我打算利用美国的假日。这意味着我要查找的文件是us-national.php,我们将使用该文件名来配置我们的假期。

public function boot()
{
    BusinessDay::enable(Carbon::class);
    Carbon::setHolidaysRegion('us-national');
}

就是这样,现在我们可以通过调用isHolidaycarbon 实例上的方法来知道一天是否是假期,例如:

now()->isHoliday();

把它们放在一起

我们现在可以通过将假期检查添加到我们的跳过方法来完成我们的命令配置:

protected function schedule(Schedule $schedule)
{
    $schedule->command('send:daily-email')->weekdays()->skip(function () {
        return now()->isHoliday();
    });
}

laravel cms

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值