Php 基于每个动作呈现模板-Kohana3.2

Php 基于每个动作呈现模板-Kohana3.2,php,templates,kohana,kohana-3,Php,Templates,Kohana,Kohana 3,我目前使用的是Kohana的默认模板系统。目前,我为我的一个控制器扩展了Controller\u Template\u Default。用它生成的输出对于我在这个控制器中的大多数操作都是完美的,但是有些操作必须输出JSON,为此我需要一个空白页面,其中只包含输出的JSON数据(因此没有模板) 我尝试返回JSON数据,但没有使用$this->response->body($data)模板但它不起作用 你有什么建议?我应该基于每个动作而不是每个控制器呈现模板吗?我该怎么做呢?您应该为JSON响应使用

我目前使用的是Kohana的默认模板系统。目前,我为我的一个控制器扩展了
Controller\u Template\u Default
。用它生成的输出对于我在这个控制器中的大多数操作都是完美的,但是有些操作必须输出JSON,为此我需要一个空白页面,其中只包含输出的JSON数据(因此没有模板)

我尝试返回JSON数据,但没有使用
$this->response->body($data)模板但它不起作用

你有什么建议?我应该基于每个动作而不是每个控制器呈现模板吗?我该怎么做呢?

您应该为JSON响应使用并提供一个内容类型头:

$this->response->headers('Content-Type', 'application/json');
$this->response->body(json_encode($data));
此外,我在
after()
方法中呈现模板,每个操作在全局模板中都有自己的内容模板。但为了能够轻松地在JSON和HTML之间切换,我发现最好使用Kostache模块将逻辑与实际模板分离:


阅读这篇关于如何使用Kohana提供不同格式(JSON、HTML等)的文章:

在before例程或所有“JSON”操作中,输入以下句子 此->自动渲染=false; 将“自动渲染”设置为false时,Kohana将不会尝试应用模板

echo json_encode($data);
die();
脚本将在
die()之后停止执行和您将只有
json_encode($data)打印