Laravel 4 return json 作为回应

Laravel 4 return json as response

我在旧系统上工作 - laravel 4.1/4.2 - 我的控制器 returns 响应编号:

return 4;

但浏览器显示 Content-Type: text/html(不是 json)并且调试栏也会向该响应添加一些 html。

当我从 laravel doc:

尝试这个
return Response::json(['result' => 4 ]);

我收到错误消息(我有 use Symfony\Component\HttpFoundation\Response; 的 php 控制器文件)

Call to undefined method Symfony\Component\HttpFoundation\Response::json()

我也尝试用

$response = new Response(200, array(), ['result' => 4]);
return $response->json();

但我明白了

The HTTP status code "0" is not valid.

如何获得 json 响应(没有调试栏的东西)?


更新:(我测试了 Tim Levis 评论中的命题)

当我尝试时(使用和不使用 use Response

return response()->json(['result' => 4], 200);

我明白了

Call to undefined function App\Controllers\Api\response()


Update2:有人建议 Laravel 5 已经有了答案 - 实际上在 L4 中有效 - 但我认为这是偶然的 - 通常 L5 解决方案不适用于 L4 所以我们不应该混合这两个框架版本

无意中发现当我return数组

return ['result' => 4 ];

然后响应有 Content-Type: application/json 而没有调试栏的东西 - 我不知道为什么 - 但它有效 :)

Response::json() 应该在 Laravel 4.2 中工作,因为 5 之前的版本使用 Facades (Response::) 而不是全局方法 (response())。

这里的主要问题是导入的 Response class 不是 Facade,而是 Symphony 组件。要解决此问题,请使用正确的导入:

use Response; // Illuminate\Support\Facades\Response (or Laravel 4.2 equivalent)

class ExampleController extends Controller {
  public function exampleRequest(){
    return Response::json(['result' => 4], 200);
  }
}

旁注; return ['result' => 4];“有效”,因为 Laravel 猜测控制器中 return 语句的内容类型,但最好具体一些以避免任何问题。


更新:您可以使用无需 use Response 语句

的快捷方式
return \Response::json(4);`