0

我目前正在使用带有 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?我尝试将 header('Content-type: text/html') 添加到控制器中的方法,但这不起作用。

知道我做错了什么吗?

4

1 回答 1

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));
    /* ... */
}

查看recess/http/MimeTypes.class.php 以查看“xml”将如何响应正确的标题。您还需要查看 SmartyView 以查看您返回的 mimetype 以查看将设置的标题。

于 2012-03-03T11:40:40.967 回答