在Smarty中使用Recess框架时如何指定Content-type

时间:2012-01-13 19:24:02

标签: php http http-headers smarty recess

我目前正在使用带有Smarty模板引擎的PHP Recess框架。在我的控制器中,我的代码类似于:

/**
* !View Smarty
* !RespondsWith Smarty
* !Prefix Views: templates/, Routes: /
*/

class XHomeController extends Controller {

    /** !Route GET */
    function index()
    {
            $this->title = "Some title...";
    }

}

并且,在相应的Smarty视图中,我照常引用{$title}

视图在除Android浏览器之外的所有浏览器中都能正确呈现(在我的2.3 Nexus One上,在3.2平板电脑上以及在Android模拟器中)。我认为我已经将问题追溯到Smarty视图正在呈现并发送到没有Content-type的浏览器这一事实。

使用http://web-sniffer.net/,我注意到响应中的Content-type为空。

如何在使用Smarty时指定Recess中的Content-type?我尝试将标题('Content-type:text / html')添加到控制器中的方法但这不起作用。

知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我想在凹槽/框架/视图中看到SmartyView代码。该类应该有一个canRespondWith()方法,该方法将验证视图是否可以使用某个MIMEType进行响应。例如:

class XmlView extends AbstractView {

    public function canRespondWith(Response $response) {
            return 'xml' === $response->request->accepts->format();
    }
}

如果返回true,则使用XmlView。在AbstractView类中,sendHeaders()方法将设置Content-Type:

protected function sendHeadersFor(Response $response) {
    header('HTTP/1.1 ' . ResponseCodes::getMessageForCode($response->code));

    $format = $response->request->accepts->format();
    header('Content-Type: ' . MimeTypes::preferredMimeTypeFor($format));
    /* ... */
}

查看凹进/ http / MimeTypes.class.php,了解'xml'将如何使用正确的标头进行响应。您还需要查看SmartyView以查看要返回的mimetype,以查看将设置的标头。