Laravel - 从帮助者返回响应

时间:2016-08-26 08:59:28

标签: php laravel laravel-5.2

我正在使用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
        }
    }
}

有没有办法可以从帮助函数向客户端发送响应?

2 个答案:

答案 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静态属性中添加了某些东西,那么就发送一个而不是控制器响应。