2017-11-20 1 views
0

TYPO3でスケジューラタスクを開発しました。これは基本的に各クラスリポジトリにアクセスしながらファイルを生成します。別のクラスのレコードに依存する特定のレコードがBEで削除されている場合は、この対応するレコードもリポジトリから削除する必要があります。そのために私はリポジトリメソッドを使うことを考えました。TYPO3スケジューラタスク:対応するリポジトリからレコードを削除する( - >リポジトリメソッド)

ここで私は(そこによりますが、これらの二つは私の問題に関連している)のリポジトリを定義します。

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

私はそれが欲しいのように動作していないようです。

答えて

2

Extbase ActionController以外のコンテキストでExtabase永続性レイヤーを使用する場合は、変更を永続化するために手動でPersistenceManagerをフラッシュする必要があります。

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

ありがとう、それは私が必要としていたものです。 – Mondblut

関連する問題