如何为整个Zend Framework应用程序设置/更改内容类型标头

时间:2011-05-07 16:22:05

标签: php zend-framework

我已经看过这个问题: Zend Framework how to set headers 我知道如何在每个控制器的基础上设置标头。

$this->getResponse() ->setHeader('Content-type', 'text/html; charset=utf-8')

但是我想在配置文件中设置content-header并让我设置所有响应以使用该内容类型。是否有一些内置的方法/惯例我错过了?我会满足于在引导程序中设置一些东西作为第二选择。

这是我的配置:

resources.view.doctype = "XHTML1_STRICT"
resources.view.encoding = "UTF-8"
resources.view.contentType = "text/html;charset=utf-8"

我正在使用模块和布局,如果它有任何帮助(在这种情况下是默认模块)

问候。

3 个答案:

答案 0 :(得分:8)

您可以为此编写一个插件,在没有设置其他内容类型时自动将内容类型设置为默认值。例如:

class YourApp_Controller_Plugin_ContentType extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopShutdown()
    {
        $response = $this->getResponse();
        $http_headers = $response->getHeaders();

        /**
         * Check whether the Content-Type header is defined.
         */
        $content_type_found = false;
        foreach ($http_headers as $_header)
        {
            if ($_header['name'] === 'Content-Type')
            {
                $content_type_found = true;
                break;
            }
        }

        /**
         * When no Content-Type has been set, set the default text/html; charset=utf-8
         */
        if (!$content_type_found)
        {
            $response->setHeader('Content-Type', 'text/html; charset=utf-8');
        }
    }
}

答案 1 :(得分:2)

无需检查标头是否已设置。由于setHeader()默认情况下会将现有标题保留为相同名称而不替换。

class YourApp_Controller_Plugin_ContentType extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopShutdown()
    {
        $response = $this->getResponse();

        /**
         * When no Content-Type has been set, set the default text/html; charset=utf-8
         */
        $response->setHeader('Content-Type', 'text/html; charset=utf-8');
    }
}

答案 2 :(得分:1)

实际上,如果$replace === false,Zend将添加(默认情况下)标题,即使已经存在,也会有重复的标题名称。

    if ($replace) {
        foreach ($this->_headers as $key => $header) {
            if ($name == $header['name']) {
                unset($this->_headers[$key]);
            }
        }
    }

    $this->_headers[] = array(
        'name'    => $name,
        'value'   => $value,
        'replace' => $replace
    );