TYPO3 extbase - 获取非持久对象的“uid”

时间:2013-10-25 11:22:46

标签: typo3 extbase

刚开始使用第一个extbase扩展。在localconf中,我添加了以下操作:'list,new,show,create,edit'。

默认是“创建”重定向到没有参数的“列表”,并且在创建扩展后立即正常工作。

$this->redirect('list'); // <- this works if used

但是我没有重定向到“list”,而是想重定向到“show”来显示新添加的priceFormCalc。一位同事帮我用坚持做了这件事。

以下是代码,它的工作原理。但是,在网上阅读似乎不应该是坚持运行的最佳做法。在没有先手动持久化的情况下调用动作节目应该是可行的。

所以问题是:这是正确的方法吗,还是有更多“ext base”方式显示新创建的记录?

public function createAction(\TYPO3\OgNovomatrixpricecalc\Domain\Model\PriceCalcForm $newPriceCalcForm) {
    $this->priceCalcFormRepository->add($newPriceCalcForm);
    $this->flashMessageContainer->add('Your new PriceCalcForm was created.');

    // workaround - or the right way?
    $persistenceManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Extbase_Persistence_Manager');
    $persistenceManager->persistAll(); // <- save i database
    $uid = $newPriceCalcForm->getUid(); // <- get UID of newly saved record

    // do redirect using uid of newly created priceCalcForm
    $this->redirect('show',Null,Null, array('priceCalcForm' => $uid));
}

1 个答案:

答案 0 :(得分:3)

您可以保持当前状态,然后获取uid。注入配置管理器(TYPO3 6.x方式):

/**
 * persistence manager
 *
 * @var \TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
 * @inject
 */
protected $persistenceManager;

然后使用

$this->persistenceManager->persistAll();

应用所有更改。然后,您可以将对象(或仅uid)传递给操作。