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 响应:response()->json() 或 $var->toJson()