TYPO3扩展控制器:缓存HTTP标头和状态以及HTML



>我创建了一个特定于扩展的"未找到"消息,用于删除或隐藏扩展记录的情况,该消息将显示在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;
        }
    }
}

最新更新