挂钩更新对象

时间:2015-08-01 02:06:42

标签: typo3 extbase

我在用户取消隐藏记录后使用了一个钩子。在这个钩子中,我想更新一个对象。

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?或者如何检索和更新钩子我的对象?

有人能给我一个暗示吗?

更新

现在我放弃了:(并且不使用objectmanager和repository,我使用$GLOBALS['TYPO3_DB']

中的函数

2 个答案:

答案 0 :(得分:0)

我绝对建议您在此时使用$GLOBALS['TYPO3_DB']来关注您的解决方案。 Extbase只会带来很多开销。

如果没有Extbase,您还需要更少的代码。

反正: 很可能是Extbase生成的查询被破坏了。记录您的查询并检查生成的查询。尝试并修改它,直到它工作。检查区别。

答案 1 :(得分: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']更容易。