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

时间:2018-01-12 15:00:18

标签: controller typo3 extbase typo3-7.6.x

我创建了一个特定于扩展名的“未找到”消息,要在showAction中显示已删除或隐藏扩展记录的情况。这很简单,但是当将HTTP状态设置为404时,问题出现了,只有在清除缓存后才能一次。每个后续呼叫的状态均为“200 OK”。

这是我的控制器动作:

public function showAction(\My\Model\Name $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);
    }
}

通过Fluid模板中的简单条件,我可以轻松显示特定的“Record not found”文本,并隐藏记录标准详细信息视图的HTML。

有没有办法缓存控制器操作中发送的状态(和标题)?我从早期的问题中了解到,同一问题会导致$this->response->setHeaders()

1 个答案:

答案 0 :(得分:0)

在控制器中使用以下功能来处理此类例外

/**
 * @param \TYPO3\CMS\Extbase\Mvc\RequestInterface $request
 * @param \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response
 * @throws \Exception|\TYPO3\CMS\Extbase\Property\Exception
 */
public function processRequest(\TYPO3\CMS\Extbase\Mvc\RequestInterface $request, \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response) {

    $aExceptionClasses = array(
        'TYPO3\CMS\Extbase\Property\Exception\InvalidSourceException',
        'TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException',
        'TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException',
        'TYPO3\CMS\Core\Error\Exception'
    );

    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;
        }
    }
}