【问题标题】:How to send response using "new Response" or "Response::factory()" in Kohana 3.1?如何在 Kohana 3.1 中使用“new Response”或“Response::factory()”发送响应?
【发布时间】:2012-03-14 06:50:21
【问题描述】:

我看到的例子建议这样使用:

$response = new Response();
echo $response->body($view)->send_headers()->body();

但如果我有以下代码

$response = new Response();
$response->headers('Content-Type', 'application/json');
echo $response->body($view)->send_headers()->body();

它可以发送输出,但它是 HTML 格式,而不是 JSON。

那么发送新响应和标头的有效方法是什么?我正在使用 Kohana 3.1 和 php 5.3

编辑:

在你开始认为我不使用$this->response->body(<blah here>); 是多么愚蠢之前,让我澄清一下我知道如何使用控制器的响应对象......这不是我要找的......我想发送完全来自一个静态函数的响应,该函数不在函数调用堆栈中的控制器附近:)

【问题讨论】:

    标签: php kohana kohana-3


    【解决方案1】:

    对 Kohana 还是新手,但我是这样做的,而且它似乎工作正常:

    $this->response->headers('Content-type','application/json; charset='.Kohana::$charset);
    $this->response->body(json_encode( $data_array ));
    

    我认为 charset 是可选的...希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      好的,在摸索并尝试了许多解决方案之后,我决定使用这个:
      Request::initial()->response()
      ->body($view)
      ->headers('Content-type','application/json');

      在任何地方都可以工作,除非您在流程中的某处写exit

      【讨论】:

      • 这实际上不是您原来问题的直接答案。
      • 有问题的代码不起作用,因为它是一个“回声”,所以它没有按应有的方式工作。接受答案中的代码有效,因为它实际上使用响应对象呈现结果,而不是“回显”到浏览器。
      • 我的意思是:“我想完全从一个不在函数调用堆栈中的控制器附近的静态函数发送响应:)”当您使用 Request::initial()->response() 时,您实际上是在使用来自初始请求的响应对象,它已经执行(或正在执行)并因此通过控制器、操作和内容。
      • 正是我的意思 :) 我不知道存在这样一个来自原始控制器的 Request::initial()->response()... 发现那是我的灵感时刻 :D
      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2013-06-13
      • 2020-03-06
      • 2020-01-09
      相关资源
      最近更新 更多