rizeway/job-bundle

Symfony 2 的简单任务包

安装: 167

依赖: 0

建议: 0

安全性: 0

星标: 2

关注者: 4

分支: 3

开放问题: 0

类型:symfony-bundle

dev-master 2012-10-24 14:42 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:14:17 UTC


README

一个简单的用于 symfony 2 项目(包含 doctrine)的任务包

安装

  1. 将此包添加到您的项目 composer.json 文件中

    "require": {
      "rizeway/job-bundle": "dev-master"
    },
  2. 更新您的 composer 依赖关系。

    composer.phar update

  3. 在您的 app/AppKernel.php 中注册此包

    <?php
    
    public function registerBundles()
    {
        $bundles = array(
            // ...some other bundles...
            new Rizeway\JobBundle\RizewayJobBundle(),
        );
  4. 更新您的数据库模式

    php app/console doctrine:database:update --force

用法

  1. 将守护进程添加到您的 cron 调度表中

    php app/console rizeway:job:daemon

  2. 创建一个任务

任务是一个实现了 Rizeway/JobBundle/JobHandler/JobHandlerInterface(您也可以扩展 Rizeway/JobBundle/JobHandler/ContainerAwareJobHandler)的类

示例

<?php

namespace MyBundle\JobHandler;

use Rizeway\JobBundle\JobHandler\ContainerAwareJobHandler;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class MyJobHandler extends ContainerAwareJobHandler
{
    protected function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setRequired(array(
            'my_required_option',
        ));
    }

    public function run()
    {
        $this->log('My Option Is : '.$this->getOption('my_required_option'));
        ....
    }
  1. 调度一个任务

调度任务的方式如下

<?php

namespace MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Rizeway\JobBundle\Entity\Job;

class myController extends Controller
{
    public function myAction()
    {
        $job = new Job();
        $job->setName('Job Name');
        $job->setType('Job Type');
        $job->setClassname('\MyBundle\JobHandler\MyJobHandler');
        $job->setOptions(array(
            'my_required_option'   => 'option_value'
        ));

        $this->getDoctrine()->getEntityManager()->persist($job);
        $this->getDoctrine()->getEntityManager()->flush();
        ....
    }

高级用法

  1. 日志记录器

DoctrineLogger 实例可以通过一个服务获得。如果您想在守护进程命令中使用自己的 Logger 类,只需创建一个新的类,实现 JobLoggerInterface 并将其声明为一个服务。

以下是一个示例

parameters:
    rizeway_job.logger.class: Acme\AcmeBundle\Logger\AcmeLogger