2015-08-01 1 views
1

Я использую крючок после того, как пользователь отобразит запись. В этом случае я хочу обновить объект.Обновить объект в списке

class ProcessCmdmap { 
    function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$reference) { 
     if ($table == 'tx_oaevents_domain_model_events' && $status == 'update' && $fieldArray['hidden'] == 0) { 

       // Get objectmanager 
       $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 

       // Get repo 
       $repository = $objectManager->get('Mab\\Oaevents\\Domain\\Repository\\EventsRepository'); 

       // Get config manager 
       $configurationManager = $objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface'); 

       // Get settings and storage pid 
       $settings = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); 
       $storagePid = $settings['plugin.']['tx_oaevents.']['persistence.']['storagePid']; 

       // Build default query settings 
       $querySettings = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings'); 
       $querySettings->setStoragePageIds(array($storagePid)); 

       $repository->setDefaultQuerySettings($querySettings); 

       $object = $repository->findByUid($id); 

       // modify object 
       // Update/Persist object 


     } 
    } 
} 

Но я не могу получить объект с "findByUid()" или "FindAll()". Я использую objectmanager в неправильной области? Или как можно получить и обновить в hooks мой объект?

Может кто-нибудь дать мне подсказку?

Update:

Теперь я отказаться :(и не использовать objectmanager и хранилище, я использовать функции из $GLOBALS['TYPO3_DB']

ответ

0

Я определенно рекомендую следовать своему решению с помощью $GLOBALS['TYPO3_DB'] в этой точке. Extbase только приносит много накладных расходов здесь

Без Extbase вам также нужно меньше кода здесь

в любом случае:.. Скорее всего, сгенерированные запросы Extbase нарушены. Запишите ваши запросы и проверьте сгенерированный. Попробуйте и измените его, пока он не сработает. Проверьте разницу.

0

Вы можете попробовать, не используя «setStoragePageIds». Если вы ищете запись по uid, это бесполезно.

Мой рабочий код processDatamap:

/** @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager */ 
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 

/** @var $orderRepository \Vendor\ExtensionName\Domain\Repository\OrderRepository */ 
$orderRepository = $objectManager->get('Vendor\\ExtensionName\\Domain\\Repository\\OrderRepository'); 
$order = $orderRepository->findByUid($id); 

Это правда, что использование $ GLOBALS [ 'TYPO3_DB'] проще.