TYPO3计划程序任务:从相应的存储库中删除记录( - >存储库方法)

时间:2017-11-20 08:20:53

标签: php typo3 task

我在TYPO3中开发了一个Scheduler任务,它基本上在访问每个类库时生成文件。如果在BE中删除了与另一个类的记录具有依赖关系的某个记录,我希望该任务也从存储库中删除该相应的记录。为此我想到了使用存储库方法。

这里我定义了存储库(还有更多,但这两个与我的问题相关):

/** @var CustomerRepository $apprep */
$apprep = $objectManager->get(\Cjk\Icingaconfgen\Domain\Repository\HostRepository::class);
/** @var Typo3QuerySettings $querySettings */
$querySettings = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$apprep->setDefaultQuerySettings($querySettings);
$hosts = $apprep->findAll();

/** @var CustomerRepository $apprep2 */
$apprep2 = $objectManager->get(\Cjk\Icingaconfgen\Domain\Repository\ServicesRepository::class);
/** @var Typo3QuerySettings $querySettings */
$querySettings = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$apprep2->setDefaultQuerySettings($querySettings);
$services = $apprep2->findAll();
$srvrep = $apprep2;

在我的代码中,我有以下块:

foreach($services as $service){   
    $validate2 = false;
    foreach($hosts as $host){
        if($host->getUid() == $service->getHost()){
            $validate2 = true;
            break;
        }
    }
    if($validate2 == false){
        foreach($kunden as $kunde){
            $name = $kunde->getName();
            $files = array_filter(scandir('/etc/icinga2/conf.d/hosts/'.$name.'/'), function($item) {
            return !is_dir('/etc/icinga2/conf.d/hosts/'.$name.'/'. $item);
            }); 
            foreach($files as $fileval){
                if($fileval == 'Service_' . $service->getServicename(). '_'. $kunde->getKundennummer().'.conf'){
                    unlink('/etc/icinga2/conf.d/hosts/'.$kunde->getName().'/'.$fileval);
                }
            }
        }
        $srvrep->remove($service);
    }
}

正如您所看到的,我检查相应的服务是否有任何主机(如果存在依赖关系,$ service对象的getter getHost()基本上返回特定对应主机对象(getUid())的Uid。如果没有依赖项,它首先删除文件,然后我希望它从存储库中删除该记录。但行

$srvrep->remove($service);

似乎不能像我想要的那样工作。

1 个答案:

答案 0 :(得分:2)

在Extbase ActionController之外的任何上下文中使用Extbase持久层时,您需要手动刷新PersistenceManager以保留更改。

$persistenceManager = $objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class);
$persistenceManager->persistAll();