我有以下模型:“Shelf”和“Book”,处于1:n关系。
还有一个调度程序任务(扩展“调度程序”6.2.0)分析书籍并删除它们。调度程序任务分为两类:任务本身及其业务逻辑。
任务:
namespace Vendor\MyExt\Scheduler;
class MultiStepProcessTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask {
public function execute() {
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class);
return $businessLogic->run();
}
}
业务逻辑:
namespace Vendor\MyExt\Scheduler;
class MultiStepProcessTaskBusinessLogic {
public function run() {
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$shelvesRepository = $objectManager->get('Vendor\\MyExt\\Domain\\Repository\\ShelvesRepository');
$shelf = $shelvesRepository->findOneByLastFinishedTaskNumber(0);
$book = $shelf->getBooks()->current();
....
$shelf->removeBook($book);
$shelvesRepository->update($shelf);
return 1;
}
}
如果从我的扩展程序中调用 - 一切正常:该书已删除。 为了测试它,我将这些行放入一个控制器的列表操作中:
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class);
$businessLogic->run();
如果从调度程序调用(作为任务),则不会删除该书!创建存储库,获取工具架,获取工作簿。但是$shelf->removeBook($book);
根本没有效果。有人可以解释一下为什么吗?
我正在使用TYPO3版本6.2.19
答案 0 :(得分:1)
您需要实例化PersistenceManager,然后调用PersistenceManager->persistAll();
。这样做的原因是在控制器操作中,默认情况下,在每个操作结束时调用它作为一种清理任务。默认情况下,您的任务不会执行此操作,因此您需要手动保留。