typo3 流程:捕获异常并转发回原始操作
typo3 flow: catch exception and forward back to originating action
在我的 typo3 flow 应用程序中,我想在将异常作为闪现消息抛出后停止执行。因此我写了这个:
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');
}
如我所愿,消息显示为快闪消息。但是函数的执行并没有停止。有谁知道,为什么以及如何预防?如果条件为真,则需要重定向到原始操作。
我现在用下面的代码得到了它:
// 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();
在我的 typo3 flow 应用程序中,我想在将异常作为闪现消息抛出后停止执行。因此我写了这个:
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');
}
如我所愿,消息显示为快闪消息。但是函数的执行并没有停止。有谁知道,为什么以及如何预防?如果条件为真,则需要重定向到原始操作。
我现在用下面的代码得到了它:
// 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();