Response::json() - Laravel 5.1

39
我试图使用return Response::json('data', $request);返回数据,但是出现了错误:

FatalErrorException in ProjectsController.php line 74: Call to undefined method Illuminate\Http\Response::json()

请问Response::json()在哪里定义?我做错了什么?

你也可以使用response()助手函数。return response(['errorMsg' => [...]], 400);如果你的响应是一个数组,那么这个助手函数将把数组转换为JSON格式,并设置正确的头部application/json。 - Maik Lowrey
6个回答

94

请使用Laravel 5.1中的辅助函数代替:

return response()->json(['name' => 'Abigail', 'state' => 'CA']);

这将创建一个 \Illuminate\Routing\ResponseFactory 实例。查看 phpDocs 以了解下面可能的参数:

/**
* Return a new JSON response from the application.
*
* @param string|array $data
* @param int $status
* @param array $headers
* @param int $options
* @return \Symfony\Component\HttpFoundation\Response 
* @static 
*/
public static function json($data = array(), $status = 200, $headers = array(), $options = 0){

    return \Illuminate\Routing\ResponseFactory::json($data, $status, $headers, $options);
}

1
离题一下,如何在视图中获取这些数据?只需使用 $name 代表 'Abigail' 和 $state 代表 'CA' 吗? - Shafi
取决于您的使用。一个XHR请求(Ajax)将持有一个带有“名称”和“状态”属性的对象。@MASh - baao
你能再解释一下吗?我是初学者。 - Shafi
我不确定我能解释什么..也许你应该提出一个新问题,并包括你想要实现什么的细节...@MASh - baao
1
如果我使用view(someview)->with('name', "alex");,那么在视图中我可以使用{{ $name }}来获取。那么像这样,我可以使用{{ $state }}来获取'CA'吗? - Shafi
那么,{{ $state }} 的替代写法是什么? - Shafi

12

您需要在文件头部添加use Response;外观。

只有这样才能成功检索数据。

return Response::json($data);

请编辑并添加更多信息。我们不鼓励只提供代码或“尝试这个”式的答案,因为它们缺乏可搜索的内容,并且无法解释为什么某人应该“尝试这个”。 - abarisone

11
经过足够的搜索,我从控制器中找到了答案,你只需要一个反斜杠,比如 return \Response::json(['success' => 'hi, atiq']);。或者你可以直接返回数组 return array('success' => 'hi, atiq');,在 Laravel 5.2 版本中将会被渲染为 JSON 格式。

是的,你救了我一命,但为什么我们没有使用“use”语句呢?你也应该解释一下为什么。 - 4D - Problem Solver

4
然而,对于一些程序员来说,之前的回答仍然可能会让他们感到困惑,尤其是那些可能正在使用旧书或教程的初学者。
或者也许您仍然觉得必须使用facade,当然您可以使用它。
就我个人而言,我仍然喜欢使用facade,因为有时在构建我的api时,我会忘记在Response之前使用'\'。
如果您和我一样,只需添加

   "use Response;"

在你的类中使用“extends controller”即可。

有了这个,现在你可以使用:

$response = Response::json($posts, 200);

最初的回答:

而不是:

$response = \Response::json($posts, 200);

1

从控制器中,您还可以返回一个对象/数组,它将作为JSON响应发送(包括正确的HTTP标头)。

public function show($id)
{
    return Customer::find($id);
}

1
尽管Response::json()最近并不流行,但这并不妨碍我们使用它。事实上,您无需任何门面来使用它。
而是:
$response = Response::json($messages, 200);

使用这个:
$response = \Response::json($messages, 200);

“用斜杠,你肯定能顺利进行。”

你的意思是使用它不需要“别名”吗?因为那是你所引用的Facade。 - lagbox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接