typo3忽略storagePid

时间:2015-03-09 12:34:01

标签: typo3 extbase typo3-6.2.x

我尝试使用调度程序任务构建导入程序。

该任务创建一个对象管理器,用于创建我的导入服务。 此导入服务具有对存储库的依赖性。

我只是创建实例并将它们添加到存储库中。

它很好用,直到我试图指定我的记录应该保存在哪个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

我可能忽略了任何陷阱吗?

3 个答案:

答案 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']