繁体   English   中英

typo3流:捕获异常并转发回原始动作

[英]typo3 flow: catch exception and forward back to originating action

在我的typo3 flow应用程序中,我想在引发异常作为Flash消息后停止执行。 因此,我这样写:

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

如我所愿,消息ist显示为Flash消息。 但是函数的执行不会停止。 有人知道,为什么以及如何预防吗? 在这种情况下,如果条件为真,则需要重定向到发起动作。

我现在用以下代码得到它:

// 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM