Laravel 4 返回 json 作为响应

Posted

技术标签:

【中文标题】Laravel 4 返回 json 作为响应【英文标题】:Laravel 4 return json as response 【发布时间】:2021-01-24 16:03:34 【问题描述】:

我在旧系统上工作 - laravel 4.1/4.2 - 我的控制器返回数字作为响应:

return 4;

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

当我从 laravel doc 尝试这个时:

return Response::json(['result' => 4 ]);

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

调用未定义的方法 Symfony\Component\HttpFoundation\Response::json()

我也尝试使用

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

但我明白了

HTTP 状态码“0”无效。

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


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

当我尝试时(有和没有use Response

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

我明白了

调用未定义函数 App\Controllers\Api\response()


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

【问题讨论】:

我不知道这种语法在 Laravel 4 中是否有效,但在最近的版本中它通常以 return response()->json(['result' => 4], 200); 的形式完成。 Response::json() 不起作用似乎很奇怪,除非您的 use 语句是错误的。我想应该是use Response;(门面),而不是use Symfony\Component\HttpFoundation\Response; 这能回答你的问题吗? Response::json() - Laravel 5.1 @TimLewis use Response;Response::json(["result"=>4]); 作品 - 请写下您的评论作为答案 - 我会接受它 回复:update2; Laravel 通常非常擅长向后兼容。使用Response::json() 的 Laravel 5 解决方案问题的答案之一有效,因为这是 Laravel 4 语法,它保留在 Laravel 5 及更高版本中。 response()->json() 的实际解决方案将不起作用,因为这些是在 Laravel 5 中引入的 :) 你通过 Call to undefined function App\Controllers\Api\response() 错误确认了这一点 【参考方案1】:

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

这里的主要问题是导入的Response 类不是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]; "works",因为 Laravel 会猜测 Controller 中 return 语句的内容类型,但最好是具体的以避免任何问题。


更新:您可以使用没有use Response 语句的快捷方式

return \Response::json(4);`

【讨论】:

@KamilKiełczewski 感谢快捷编辑,请注意json(4)json(['result' => 4]) 在尝试访问响应时可能不一样:)【参考方案2】:

无意中发现返回数组的时候

return ['result' => 4 ];

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

【讨论】:

以上是关于Laravel 4 返回 json 作为响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中返回json响应

Laravel json 响应:response()->json() 或 $var->toJson()

Laravel json() 响应返回值两次

Laravel 控制器返回索引视图而不是 json 响应

Laravel/Vue - 传递数据:Json 嵌套值作为字符串

Laravel 返回带有额外 ` ' ` 引用的 JSON 响应:" ' "status":500,"m