2015-06-10 26 views
0

在我的typo3流應用程序中,我想在拋出異常作爲flash-message之後停止執行。因此,我寫了這樣的:typo3流:捕獲異常並轉發回原始操作

public function updateAction(Mitglied $mitglied) { 

    if ($xy == 'z') { 
     try { 
      throw new \TYPO3\Flow\Validation\Exception\InvalidValidationOptionsException('Fehler: In dieser Kombination nicht zulässig', 1); 
     } catch (\TYPO3\Flow\Validation\Exception\InvalidValidationOptionsException $e) { 
      $this->flashMessageContainer->addMessage(new \TYPO3\Flow\Error\Error($e->getMessage())); 
     } 
    } 

    $this->mitgliedRepository->update($mitglied); 
    $this->addFlashMessage('Mitglied erfolgreich geändert.'); 
    $this->redirect('index'); 
} 

消息顯示,因爲我想,作爲flash-message。但功能的執行並沒有停止。有人知道,爲什麼以及如何預防?對於這種情況,可能需要重定向到原始動作,即if條件爲真。

+0

「消息北京時間出」? – Junaid

+0

是;我的意思是,「Fehler:In dieser Kombination nichtzulässig」的消息顯示爲flash-message。所以顯然這個異常會被捕獲,但是函數會被執行。 – Andre

+0

你的代碼的確很重要,你告訴它。你試圖拋出一個異常,然後你抓住它。你想做什麼? – jurgemaister

回答

0

我用下面的代碼現在明白了:

// get back to originating request - see https://git.typo3.org/Packages/TYPO3.Flow.git/blob/master:/Classes/TYPO3/Flow/Mvc/Controller/ActionController.php 

$referringRequest = $this->request->getReferringRequest(); 
if ($referringRequest === NULL) { 
     return; 
} 
$packageKey = $referringRequest->getControllerPackageKey(); 
$subpackageKey = $referringRequest->getControllerSubpackageKey(); 
if ($subpackageKey !== NULL) { 
     $packageKey .= '\\' . $subpackageKey; 
} 
$argumentsForNextController = $referringRequest->getArguments(); 
$argumentsForNextController['__submittedArguments'] = $this->request->getArguments(); 
$argumentsForNextController['__submittedArgumentValidationResults'] = $this->arguments->getValidationResults(); 
$this->forward($referringRequest->getControllerActionName(), $referringRequest->getControllerName(), $packageKey, $argumentsForNextController); 

這到底是要容易得多:

$this->errorAction()->forwardToReferringRequest();