litvinab/cron-event

此软件包最新版本(v1.0)没有可用的许可信息。

当前symfony2 bundle基于存储在数据库中的计时器在应用内部生成事件。

安装: 487

依赖: 0

建议者: 0

安全: 0

星标: 1

观察者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0 2016-09-22 13:10 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:53:15 UTC


README

用于设置和运行基于cron的定时器和事件的symfony2 bundle。它根据存储在数据库中的计时器在应用内部生成事件。

当前bundle只支持MongoDB。

安装和检查步骤

  1. 在项目根目录下运行命令: composer require litvinab/cron-event

  2. AppKernel.php 中添加 new Litvinab\Bundle\CronEventBundle\CronEventBundle()

  3. 设置cron任务:每分钟运行一次 php app/console cron:run

  4. 为了测试目的,将bundle测试路由添加到 routing.yml

cron:
    resource: "@CronEventBundle/Resources/config/routing.yml"
    prefix:   /cron
  1. 要添加测试计时器(1分钟计时器)和事件,请访问 http://your-domain/cron/

  2. 添加的调度将在此页面上显示: http://your-domain/cron/showstatus 字段应该是 未过期

  3. 在步骤#5后1-2分钟刷新 http://your-domain/cron/show 页面。status 字段应该是 过期,这意味着bundle运行正常。

!! 请记住从 routing.yml 中删除测试路由。将其留下是不安全的。

支持的事件类型

timer - 应用程序中的事件将在N毫秒后触发。

event - 应用程序中的事件将在指定的日期和时间触发。

如何使用

1. 在您的代码中设置事件

在控制器中

// get cron manager
$cronManager = $this->get('cron_event.manager');

// set timer with: human name, name, period 
// name of the symfony event: `cron_event.` + name
$timer = $cronManager->setTimer('My timer', 'test_timer', 60);

2. 添加cron事件订阅者

当然,如果您愿意,您可以创建事件监听器。

services.yml

services:
     app.subscriber.cron:
          class: AppBundle\EventSubscriber\CronSubscriber
          calls:
            - [setLogger, [@cron_event.logger]]
          tags:
            - { name: kernel.event_subscriber }

/YourBundle/EventSubscriber/CronSubscriber.php

<?php
namespace AppBundle\EventSubscriber;

use Litvinab\Bundle\CronEventBundle\Events\CronEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;


/**
 * Class CronSubscriber
 */
class CronSubscriber implements EventSubscriberInterface
{
    /**
     * @var Cron Logger
     */
    private $logger;

    /**
     * Set cron logger
     *
     * @param $logger
     */
    public function setLogger($logger)
    {
        $this->logger = $logger;
    }

    /**
     * Get subscribed events
     *
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return array(
            'cron_event.test_timer' => array('onCronTestEvent', 0)
        );
    }

    /**
     * Test event
     *
     * @param CronEvent $cronEvent
     */
    public function onCronTestEvent(CronEvent $cronEvent)
    {
        // confirm that event is executed
        $this->logger->addInfo('onCronTestEvent');

        // delete cron event from DB
        $cronEvent->delete();
    }
} 

3. 检查日志

CronEvent bundle提供它自己的记录器。记录器的服务名称是 cron_event.logger

onCronTestEvent 字符串应该在2-3分钟后出现在 app/logs/cron.log 文件中。

控制台命令

cron:run - 此命令应该在每分钟或其他时间段在 crontab 中启动;

cron:list - 列出所有调度;