我正在使用Laravel 5.2创建一个公共API。为了简化控制器中的代码,我创建了几个辅助函数,其中一个函数是返回API调用的响应,如下所示:
if (! function_exists('buildResponse'))
{
function buildResponse($data)
{
return response()->json($data)->header('foo', 'bar');
}
}
这是我从控制器调用它的方式:
public function registration()
{
buildResponse(['a' => 'Success']);
}
然而,这不起作用。它仅在我在函数前添加return
时才有效。
public function registration()
{
return buildResponse(['a' => 'Success']);
}
有人可能会说,"好的,然后只包括return
!"。问题是,这个特殊的函数将被另一个辅助函数调用,例如:
if (! function_exists('throwResponseCode'))
{
/**
* Throws a response code to the client.
* @param $code
* @return mixed
*/
function throwResponseCode($code)
{
switch ($code) {
case '101':
$data[$code] = 'Unable to establish a database connection';
return buildResponse($data);
// Other cases here
}
}
}
有没有办法可以从帮助函数向客户端发送响应?
答案 0 :(得分:7)
保持简单兄弟!
更改强>
return response()->json($data)->header('foo', 'bar');
要强>
return response()->json($data)->header('foo', 'bar')->send();
答案 1 :(得分:0)
简短的回答,没有。不是直接的。
return
的目的是完成功能并给出结果。 Laravel认为控制器的返回值是响应,因此其他函数不能使用return返回。
围绕着这一点。考虑一下。创建一个middleware,在控制器生成响应后工作,即在第一行中调用$next($request)
。在这里,您可以根据需要更改响应。要将帮助程序连接到此中间件,可以使用静态方法或属性。中间件的逻辑是,如果有人在中间件的$response
静态属性中添加了某些东西,那么就发送一个而不是控制器响应。