TYPO3 extbase - Получить задачу планировщика по UID и выполнить ее


У меня в планировщике есть задача с идентификатором 5:

task in schedueler

Теперь я пытаюсь получить задачу, а затем выполнить ее.

...

/**
 * @var \TYPO3\CMS\Scheduler\Scheduler
 * @inject
 */
protected $scheduler;

...

public function createAction($filepath, Strategy $strategy)
{
    ...
    $taskObject = $this->scheduler->fetchTaskRecord(5)["serialized_task_object"];

    $task = unserialize($taskObject);

    if ($this->scheduler->isValidTaskObject($task)) {

        // The task is valid, return it
        $this->scheduler->executeTask($task);
    }

    ...
}

Но я получаю следующую ошибку: Fatal error: Call to a member function saveTask() on null in /var/www/typo3/typo3_src-6.2.25/typo3/sysext/scheduler/Classes/Task/AbstractTask.php on line 469

Вот что я получу, если выполню var_dump($taskObject);

Строка (588) "O:32:"TYPO3\CMS\Extbase\Scheduler\Task":9:{s:20:"*commandIdentifier";s:39:"importr:import:initializeservicemanager";s:12:"*arguments";a:1:{s:12:"extensionKey";s:0:"";}s:11:"*defaults";a:2:{s:12:"extensionKey";N;s:4:"mail";N;}s:10:"*taskUid";i:5;s:11:"*disabled";b:1;s:12:"*execution";O:29:"TYPO3\CMS\Scheduler\Execution":6:{s:8:"*start";i:1475152860;s:6:"*end";i:1475152860;s:11:"*interval";i:0;s:11:"*multiple";i:0;s:10:"*cronCmd";s:0:"";s:23:"*isNewSingleExecution";b:0;}s:16:"*executionTime";i:1475152860;s:14:"*description";s:0:"";s:12:"*taskGroup";i:0;}"

Если Я вывожу $task с помощью var_dump сразу после проверки isValidTaskObject, затем я просто получаю пустую страницу.

Если быть более точным, я работаю внутри функции createAction из файла Importr/Classes/Controller/ImportrController.php, который является частью расширения Importr

Author: tereško, 2017-01-16

1 answers

Я думаю, вам следует просто использовать fetchTask() вместо fetchTaskRecord(), чтобы получить объект задачи вместо массива. Я просто попробовал это и не получил никакой ошибки.

$scheduler = $this->objectManager->get(\TYPO3\CMS\Scheduler\Scheduler::class);
$schedulerTask = $scheduler->fetchTask(1);
$schedulerTask->execute();

Не так много, но, по крайней мере, немного информации/документации: https://docs.typo3.org/typo3cms/extensions/scheduler/latest/DevelopersGuide/SchedulerApi/Index.html

ХТ мерзилла

 3
Author: Ralf Merz, 2017-01-16 13:32:45