我尝试使用调度程序任务构建导入程序。
该任务创建一个对象管理器,用于创建我的导入服务。 此导入服务具有对存储库的依赖性。
我只是创建实例并将它们添加到存储库中。
它很好用,直到我试图指定我的记录应该保存在哪个pid上。我尝试在setup.txt中配置它。
plugin.tx_extkey {
view {
templateRootPath = {$plugin.tx_extkey.view.templateRootPath}
partialRootPath = {$plugin.tx_extkey.view.partialRootPath}
layoutRootPath = {$plugin.tx_extkey.view.layoutRootPath}
}
persistence {
storagePid = {$plugin.tx_extkey.persistence.storagePid}
classes {
EXTNAME\EXTNAME\Domain\Model\MODELNAME {
newRecordStoragePid = {$plugin.tx_extkey.persistence.storagePid}
}
}
}
features {
# uncomment the following line to enable the new Property Mapper.
# rewrittenPropertyMapper = 1
}
}
module.tx_extkey {
persistence < plugin.tx_extkey.persistence
}
但那没用。一切仍然保存到pid 1
。
我可能忽略了任何陷阱吗?
答案 0 :(得分:1)
我发现了一种丑陋的方式。当通过调度程序执行服务时,BackendConfigurationManager不会获取extensionName。在任务中手动设置它可解决此问题。
$objectManager = GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
/** @var BackendConfigurationManager $configurationManager */
$configurationManager = $objectManager->get('TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager');
$configurationManager->setConfiguration(array(
'extensionName' => 'hnsenvionjob'
));
答案 1 :(得分:0)
我使用了In an extbase extension, how to access the persistence layer from a scheduler task?中lorenz推荐的ImportCommandController(我的实际代码在此期间发生了变化,如果你需要,请告诉我)
我必须手动设置pid:
$item->setPid($storagePid);
答案 2 :(得分:-1)
有一个简单的技巧
在你的ts中添加类似的东西
plugin.tx_extkey.settings.storagePid = {$plugin.tx_extkey.persistence.storagePid}
这样,您就可以在代码中的任何位置访问您的存储pid,从而可以访问您的ts。例如在控制器
中$this->settings['storagePid']