2015-03-09 2 views
0

Я пытаюсь создать импортера с задачей планировщика.typo3 игнорирует storagePid

Задача создает диспетчер объектов, который создает мою службу импорта. Эта служба импорта имеет зависимости от репозитория.

Я просто создаю экземпляры и добавляю их в репозиторий.

Он работает хорошо, пока я не попытался указать, на каком 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

pid 1 выглядит как литой из строки, а не идентификатор страницы. Поэтому я подозреваю, что переменная не установлена. – pgampe

+0

другой возможной причиной может быть неправильный плагин - «tx_extkey» на самом деле «tx_extkey_pluginname» - поэтому, если вы используете несколько плагинов, убедитесь, что вы настроили материал для правильного плагина (это была моя проблема ;-)) - полная документация здесь: https://docs.typo3.org/typo3cms/ExtbaseFluidBook/b-ExtbaseReference/Index.html –

ответ

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

Существует простой трюк для того

добавить в ваших TS-то подобное

plugin.tx_extkey.settings.storagePid = {$plugin.tx_extkey.persistence.storagePid} 

Это позволит вам иметь доступ к вашему хранилищу pid везде в вашем коде, где у вас есть доступ к вашим ts. Например, в контроллере

$this->settings['storagePid']