我已经看过这个问题: 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"
我正在使用模块和布局,如果它有任何帮助(在这种情况下是默认模块)
问候。
答案 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
);