>我创建了一个特定于扩展的"未找到"消息,用于删除或隐藏扩展记录的情况,该消息将显示在showAction中。这很简单,但是当将HTTP状态设置为404时,出现了一个问题,即这在清除缓存后仅有效一次。每个后续调用的状态为"200 OK"。
这是我的控制器操作:
public function showAction(MyModelName $model = null)
{
if (is_null($model)) {
$this->response->setStatus(404);
$this->response->sendHeaders();
$this->view->assign('model', ['notFound'=> 1]);
} else {
$this->view->assign('model', $model);
}
}
通过流体模板中的简单条件,我可以轻松显示特定的"未找到记录"文本,并隐藏记录标准详细信息视图的 HTML。
有没有办法缓存控制器操作中发送的状态(和标头(?我从之前的问题中知道,同样的问题占$this->response->setHeaders()
.
在控制器中使用以下函数来处理此类异常
/**
* @param TYPO3CMSExtbaseMvcRequestInterface $request
* @param TYPO3CMSExtbaseMvcResponseInterface $response
* @throws Exception|TYPO3CMSExtbasePropertyException
*/
public function processRequest(TYPO3CMSExtbaseMvcRequestInterface $request, TYPO3CMSExtbaseMvcResponseInterface $response) {
$aExceptionClasses = array(
'TYPO3CMSExtbasePropertyExceptionInvalidSourceException',
'TYPO3CMSExtbaseMvcControllerExceptionRequiredArgumentMissingException',
'TYPO3CMSExtbasePropertyExceptionTargetNotFoundException',
'TYPO3CMSCoreErrorException'
);
try {
parent::processRequest($request, $response);
}
catch(Exception $e) {
$previousException = $e->getPrevious();
if(in_array(get_class($previousException), $aExceptionClasses) || in_array(get_class($e), $aExceptionClasses)){
$GLOBALS['TSFE']->pageNotFoundAndExit();
}
else{
throw $e;
}
}
}