我有一个扩展程序,当我使用不存在或不存在的记录ID调用此扩展名时,我会收到异常Object of type My\Model\... with identity "1035" not found.
页面本身的标题状态为500。
在这种情况下,我想要显示的是默认的404页面。这可能吗?我怎么能这样做?
答案 0 :(得分:1)
我猜你正在使用像
这样的方法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.');
。
答案 1 :(得分:0)
未经测试,但是从逻辑POV中你应该捕获异常,然后让你的控制器决定做什么(在你的情况下:显示404页面)。