基于每个操作渲染模板 - Kohana3.2

发布于 2024-12-02 11:37:49 字数 300 浏览 0 评论 0原文

我目前正在使用 Kohana 的默认模板系统。目前,我扩展了我的一个控制器 Controller_Template_Default。由此生成的输出对于我在该控制器中的大多数操作来说都是完美的,但是有些操作必须输出 JSON,为此我需要一个空白页面,仅在其上输出 JSON 数据(因此没有模板)。

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

你有什么建议?我应该基于每个操作而不是每个控制器来渲染模板吗?我该怎么办?

I'm currently using the default template system of Kohana. Currently, I extend for one of my controllers Controller_Template_Default. The output generated with this is perfect for most of my actions within this controller, however some actions have to output JSON, for which I need a blank page with solely the JSON data outputted on it (so no template).

I tried to return the JSON data without the template with $this->response->body($data); but it didn't work.

What is your advice? Should I render templates on a per-action basis instead of per-controller? And how do I go about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

杯别 2024-12-09 11:37:49

在之前的例程或所有“json”操作中放置以下句子
这->auto_render = false;
当 auto_render 设置为 false 时,Kohana 将不会尝试应用模板

In the before routine or in all "json" actions put the following sentence
this->auto_render = false;
With auto_render set to false, Kohana will not try to apply templates

打小就很酷 2024-12-09 11:37:49

使用

echo json_encode($data);
die();

脚本将在 die(); 之后停止执行,并且您将只打印 json_encode($data);

Use

echo json_encode($data);
die();

The script will stop executing after die(); and you will have only json_encode($data); printed

花海 2024-12-09 11:37:49

您应该使用 json_encode 并为JSON 响应:

$this->response->headers('Content-Type', 'application/json');
$this->response->body(json_encode($data));

此外,我在 after() 方法中渲染模板,每个操作在全局模板中都有自己的内容模板。但为了能够轻松地在 JSON 和 HTML 之间切换,我发现最好使用 Kostache 模块将逻辑与实际模板分开: https://github.com/zombor/KOstache

阅读这篇文章,了解如何使用 Kohana 提供不同的格式(JSON、HTML 等):http://techportal.inviqa.com/2010/02 /22/scaling-web-applications-with-hmvc/

You should use json_encode and provide a content-type header for the JSON response:

$this->response->headers('Content-Type', 'application/json');
$this->response->body(json_encode($data));

Furthermore, I render templates in my after() method with each action having his own content template within a global template. But to be able to easily switch between JSON and HTML, I find it better to use the Kostache module to separate logic from the actual template: https://github.com/zombor/KOstache

Read this article on how to use Kohana to supply different formats (JSON, HTML etc.): http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文