extbase 未找到异常重定向到 404 默认页面
extbase not found exception redirect to 404 default page
我有一个扩展程序,当我使用不存在或不再存在的记录 ID 调用此扩展程序时,我得到一个异常 Object of type My\Model\... with identity "1035" not found.
页面本身获得 header 状态 500。
在这种情况下我想做的是显示我的默认 404 页面。这可能吗?我该怎么做?
未经测试,但从逻辑 POV 来看,您应该只捕获异常,然后让您的控制器决定要做什么(在您的情况下:显示 404 页面)。
我猜你正在使用类似
的方法
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.');
.
我有一个扩展程序,当我使用不存在或不再存在的记录 ID 调用此扩展程序时,我得到一个异常 Object of type My\Model\... with identity "1035" not found.
页面本身获得 header 状态 500。
在这种情况下我想做的是显示我的默认 404 页面。这可能吗?我该怎么做?
未经测试,但从逻辑 POV 来看,您应该只捕获异常,然后让您的控制器决定要做什么(在您的情况下:显示 404 页面)。
我猜你正在使用类似
的方法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.');
.