TYPO3 ExtBase - 通过 UID 获取调度程序任务并执行它
TYPO3 ExtBase - Get scheduler task by UID and execute it
我的调度程序中有一个 ID 为 5 的任务:
现在我尝试获取任务然后执行它。
...
/**
* @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);
得到的结果
string(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;}"
如果我在 isValidTaskObject 检查后立即输出 $task
和 var_dump
,那么我只会得到一个空页面。
更准确地说,我在文件 Importr/Classes/Controller/ImportrController.php
的 createAction
函数内部工作,它是扩展 Importr
的一部分
我猜你应该只使用 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
HTH
梅尔齐拉
我的调度程序中有一个 ID 为 5 的任务:
现在我尝试获取任务然后执行它。
...
/**
* @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);
string(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;}"
如果我在 isValidTaskObject 检查后立即输出 $task
和 var_dump
,那么我只会得到一个空页面。
更准确地说,我在文件 Importr/Classes/Controller/ImportrController.php
的 createAction
函数内部工作,它是扩展 Importr
我猜你应该只使用 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
HTH 梅尔齐拉