buzzingpixel / craft-scheduler
在Craft中安排任务运行
1.0.0
2021-10-02 18:50 UTC
Requires
- php: ^8.0
- psr/container: ^1.1
- psr/log: ^1.0
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.31.0
- craftcms/cms: ^3.7
- doctrine/coding-standard: ^9
- friendsofphp/php-cs-fixer: ^2.18
- php-di/php-di: ^6.3
- phpstan/phpstan: ^0.12.69
- phpstan/phpstan-deprecation-rules: ^0.12.6
- phpstan/phpstan-strict-rules: ^0.12.9
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^5.3
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-09-13 22:46:29 UTC
README
如果你想在Craft CMS中编程安排任务运行,这个模块就是为你准备的!只需设置一个cron,每分钟调用一次命令,然后通过挂钩到事件安排的任何内容都将按你定义的计划运行。
以下是使用方法
- 在你的Craft项目中运行
composer require buzzingpixel/craft-scheduler
- 然后运行
php craft plugin/install craft-scheduler
- 现在挂钩到
RetrieveSchedule
事件来添加到计划中的项目
RetrieveSchedule
事件
RetrieveSchedule
事件是添加运行者到计划的方式。以下是一个示例
use BuzzingPixel\CraftScheduler\ScheduleRetrieval\RetrieveSchedule; use BuzzingPixel\CraftScheduler\ScheduleRetrieval\RetrieveScheduleEvent; use BuzzingPixel\CraftScheduler\ScheduleRetrieval\ScheduleConfigItem; use BuzzingPixel\CraftScheduler\Frequency; use yii\base\Event; Event::on( RetrieveSchedule::class, RetrieveSchedule::EVENT_RETRIEVE_SCHEDULE, static function (RetrieveScheduleEvent $e): void { $e->scheduleConfigItems()->addItem(item: new ScheduleConfigItem( className: SomeClass::class, // The class to run runEvery: Frequency::ALWAYS, // How often to run it method: 'myOptionalMethod', // Specify method on the class to call, defaults to __invoke resolveWith: SomeContainer::class, // Optionally provide your own ContainerInterface implementation. Defaults to the Yii container (or whatever default container you specify, see below) )); $e->scheduleConfigItems()->addItem(item: new ScheduleConfigItem( className: SomeOtherClass::class, runEvery: Frequency::HOUR, )); } );
SetDefaultContainer
事件
调度器允许你提供自己的ContainerInterface实现作为默认值。如果没有指定默认值,Craft Scheduler将使用Yii Container实现(围绕Yii容器包装,实现PSR ContainerInterface)。
use BuzzingPixel\CraftScheduler\CraftSchedulerPlugin; use BuzzingPixel\CraftScheduler\ScheduleRetrieval\SetDefaultContainerEvent; use DI\ContainerBuilder; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; use Slim\App; use Slim\Psr7\Factory\ResponseFactory; use yii\base\Event; use function DI\autowire; Event::on( CraftSchedulerPlugin::class, CraftSchedulerPlugin::EVEN_SET_DEFAULT_CONTAINER, static function (SetDefaultContainerEvent $e) { $containerBuilder = (new ContainerBuilder()) ->useAnnotations(true) ->useAutowiring(true) ->ignorePhpDocErrors(true) ->addDefinitions([ ResponseFactoryInterface::class => autowire(ResponseFactory::class), ]); $container = $containerBuilder->build(); $e->setDefaultContainer($container); } );