2017-11-20 2 views
0

Ich habe einen Taskplaner in TYPO3 entwickelt, der grundsätzlich Dateien generiert, während er auf jedes Klassenrepository zugreift. Wenn ein bestimmter Datensatz, der eine Abhängigkeit mit einem Datensatz einer anderen Klasse hat, im BE gelöscht wird, möchte ich, dass der Task diesen entsprechenden Datensatz ebenfalls aus dem Repository entfernt. Dafür habe ich über Repository-Methoden nachgedacht.TYPO3 Scheduler Task: Entfernen eines Datensatzes aus einem entsprechenden Repository (-> Repository Methoden)

Hier definieren i die Repositories (es gibt mehr, aber diese beiden sind relevant für mein Problem):

/** @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; 

Weiter unten in meinem Code habe ich den folgenden Block:

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); 
    } 
} 

So Wie Sie sehen können, überprüfe ich, ob ein entsprechender Service einen Host hat (der Getter getHost() des $ service -Objekts gibt im Grunde die UID des spezifischen korrespondierenden Hostobjekts (getUid()) zurück, wenn es eine Abhängigkeit gibt Abhängigkeit entfernt es zuerst die Datei und dann möchte ich, dass es die reco entfernt aus dem Repository. aber die Linie

$srvrep->remove($service); 

Scheint nicht so zu arbeiten, wie ich es will.

Antwort

2

Wenn Sie die Extbase-Persistenzschicht in einem beliebigen Kontext außer einer Extbase ActionController verwenden, müssen Sie die PersistenceManager manuell leeren, um Ihre Änderungen zu übernehmen.

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

Danke, das war genau das, was ich brauchte. – Mondblut

Verwandte Themen