Я думаю, вы используете метод, как
public function detailAction(\YourVendor\Ext\Domain\Model\MyModel $model)
В этом случае, это не так просто, потому что исключение уже выброшено в ядре Extbase в. Вы можете посмотреть, как я могу решить это для моего news extension:
/**
* @param RequestInterface $request
* @param ResponseInterface $response
* @throws \Exception
*/
public function processRequest(RequestInterface $request, ResponseInterface $response)
{
try {
parent::processRequest($request, $response);
} catch (\Exception $exception) {
$this->handleKnownExceptionsElseThrowAgain($exception);
}
}
/**
* @param \Exception $exception
* @throws \Exception
*/
private function handleKnownExceptionsElseThrowAgain(\Exception $exception)
{
$previousException = $exception->getPrevious();
if (
$this->actionMethodName === 'detailAction'
&& $previousException instanceof \TYPO3\CMS\Extbase\Property\Exception
&& isset($this->settings['detail']['errorHandling'])
) {
$this->handleNoNewsFoundError($this->settings['detail']['errorHandling']);
} else {
throw $exception;
}
}
В методе handleNoNewsFoundError
вы можете сделать то, что вы хотите, например, звонки $GLOBALS['TSFE']->pageNotFoundAndExit('No news entry found.');
.
Я использую по умолчанию 'showAction', созданный с помощью расширения-построителя. Ваши решения работают отлично. Для других: вы должны объявить пространство имен или использовать полный путь в функции processRequest functionvariables. – nbar