2013-10-25 38 views
2

剛開始使用第一個extbase擴展。在localconf中我添加了這些動作:'list,new,show,create,edit'。TYPO3 extbase - 獲取非持久對象的「uid」

默認情況下,「創建」重定向到「列表」沒有參數,並且在擴展名創建後正常工作。

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

但不是重定向到「列表」我想重定向到「秀」,以顯示新添加的priceFormCalc。一位同事幫助我使用堅持來實現這一點。

下面是代碼,它的工作原理。但在網絡上閱讀它似乎不應該是最好的做法,堅持下去。應該可以調用動作表演,而不必先手動持續。

所以問題是:這是做到這一點的正確方法,還是有更多的「基地」方式顯示新創建的記錄?

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)); 
} 

+0

您是否嘗試添加對象本身而不是對象的uid? '$ this-> redirect('show',NULL,NULL,array('priceCalcForm'=> $ newPriceCalcForm));' – Merec

+0

這應該工作。但你仍然需要堅持對象第一 – hildende

+0

@Merec寫一個答案,而不是評論,所以OP可以確認它。 – biesior

回答

3

你能堅持目前的狀態,然後獲得UID。注入配置管理器(TYPO3 6.x的方式):

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

然後使用

$this->persistenceManager->persistAll(); 

以應用所有更改。然後你可以將你的對象(或者只有uid)傳遞給動作。

+0

謝謝。所以堅持是必要的。感謝澄清 – Tillebeck