cossou/eventcron

此包已被弃用且不再维护。未建议替代包。
此包最新版本(0.3.2)没有可用的许可证信息。

0.3.2 2014-04-28 20:11 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:31:35 UTC


README

一个 Laravel 4 包,允许您排队事件并按顺序触发它们,或在未来某个特定时间触发。

使用场景

  • 注册24小时后向用户发送电子邮件
  • 计划邮件和新闻通讯
  • 耗时的过程,夜间运行效果更好
  • 连续触发事件(一旦触发,就排队一个新的事件)

安装

将包添加到 composer.json 并运行 composer update

{
	"require": {
		"cossou/eventcron": "*"
	}
}

app/config/app.php 中添加服务提供者

'providers' => [
	…
	
	'Cossou\EventCRON\EventCRONServiceProvider'
]

可选 将外观添加到您的别名中

'aliases' => [
	…
	
	'EventCRON' => 'Cossou\EventCRON\Facades\EventCRON'
]

如果您使用的是 Laravel 4.0,请执行迁移以创建数据库表

php artisan migrate --package=cossou/eventcron

或者,如果您使用的是 Laravel 4.1,将包迁移发布到您的应用程序

php artisan migrate:publish cossou/eventcron
php artisan migrate

如何使用

要开始使用,有三种方法可以利用此包。

通过外观,如果您已将其添加到配置文件中(推荐方式)

EventCRON::queue('myevent');

通过使用 Laravel IoC 容器

App::make('eventcron')->queue('myevent');

直接通过类

$eventcron = new Cossou\EventCRON\EventCRONManager();
$eventcron->queue('myevent');

添加事件

第一步

如图所示,您只需排队事件,并在其他地方监听它。

EventCRON::queue('myevent');
Event::listen('myevent', function()
{
	echo 'myevent just got fired!';
});

清除此事件的队列将一次性触发所有事件,因为没有设置时间。

使用参数

您还可以以数组的形式将一些数据传递给事件处理程序。

EventCRON::queue('myevent', ['string', $variable, 12, new Object()]);

Laravel 将提取所有这些变量并将它们传递给事件处理程序

Event::listen('myevent', function($string, $variable, $number, $object)
{
	echo 'myevent just got fired with some neat arguments';
	dd($string, variable, $number, $object);
});

时间是一切

当然,此包的主要思想是安排您的活动。只需将 Carbon 实例作为第三个参数传递

EventCRON::queue('myevent', NULL, Carbon\Carbon::now()->addHour());

此事件将在一小时后触发。

Carbon 是 PHP 日期时间类的一个很好的扩展。更多信息: https://github.com/briannesbitt/Carbon.

清除队列

现在您已添加所有这些事件,您希望它们被触发,以便整个设置实际上做些事情。

要触发单个事件的队列

EventCRON::flush('myevent');

要触发所有事件的队列

EventCRON::flushAll();

请注意:已设置执行时间的活动只有在那一刻过去时才会触发。此外,如果配置文件中声明 enabledfalserun_only_from_clitrue(并且您从代码中清除队列),则不会发生任何事情。

CLI + 创建 CRON 作业

以下命令用于从 CLI 清除队列

php artisan eventcron:trigger myevent
php artisan eventcron:trigger:all

在大多数情况下,您应该使用CRON作业而不是直接从代码或命令行界面来触发队列中的事件。

使用crontab -esudo crontab -e命令进入CRON文件,并在末尾添加以下行以每分钟刷新所有队列(因为您永远不知道何时安排了事件)

*/1 * * * * php /var/www/myproject/artisan eventcron:trigger:all

配置

使用以下命令发布软件包的配置文件:

php artisan config:publish cossou/eventcron

启用(默认true

简单地启用或禁用软件包。

BOOLEAN true / false

仅从命令行界面(CLI)运行(默认true

只允许从您的命令行界面(CLI)刷新队列。

BOOLEAN true / false

每次执行最大事件数(默认50

一次运行中可以触发的最大事件数(如果您不希望服务器变慢,请将其设置为更小的数字)。

INTEGER number

记录事件(默认false

是否将调试消息写入日志。

BOOLEAN true / false