我目前正在使用带有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')添加到控制器中的方法但这不起作用。
知道我做错了什么?
答案 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,以查看将设置的标头。