text-media / background-task-bundle
Symfony BackgroundTaskBundle
v2.0.0
2022-04-20 12:55 UTC
Requires
- php: >=7.2
- doctrine/doctrine-bundle: ^2.4
- doctrine/orm: ^2.5
- symfony/dependency-injection: ^3.4|^4.4|^5.4
- symfony/http-kernel: ^3.4|^4.4|^5.4
Requires (Dev)
- phpunit/phpunit: ^5.6
- squizlabs/php_codesniffer: ^3.1
README
Модуль Symfony для фоновых задач
Установка
Модуль устанавливается через добавление зависимости в composer
composer require text-media/background-task-bundle
В конфиге doctrine необходимо описать Entry Manager с именем background_task
и отдельным подключением
Активировать модуль в Kernel::registerBundles
Выполнить миграцию автоматически или вручную
php ./bin/console doctrine:schema:update --em=background_task --dump-sql
Использование
В контейнере должен быть зарегистрирован хотя бы один сервис реализующий интерфейс ProviderInterface
<?php
namespace MyBundle;
use TextMedia\BackgroundTaskBundle\ProviderInterface;
class MyService implements ProviderInterface
{
/**
* Получить список обработчиков по именам задач.
*
* @return callable[]
*/
public function getBackgroundCallbacks(): array
{
return [
'task:trim' => 'trim',
'task:pow' => 'pow'
];
}
}
services:
my_service:
class: MyBundle\MyService
tags:
- { name: "background_task.provider", alias: "my_service"}
Создать фоновую задачу можно с помощью метода TaskManagerInterface::addTask
/** @var \TextMedia\BackgroundTaskBundle\TaskManagerInterface $taskManager */
$taskManager = $container->get('background_task.manager');
$taskManager->addTask(1, 'task:pow', [2,3]);
Выполнение фоновых задач осуществляется с помощью команды
php ./bin/console background:task:run
Онформация о параметрах команды
php ./bin/console background:task:run -h
Если коллбек выбрасывает исключение DeferredException
задача будет отложена