对于Laravel,如何在内部函数中将响应返回给客户端

mar*_*ark 5 php api response laravel laravel-5

我正在使用laravel构建api,问题是客户端通过调用create()函数请求我的api,并且create()函数将调用getValidatedData()函数,如果验证,我想将验证错误返回给客户端失败,或者如果通过验证,则返回验证数据以插入数据库,到目前为止,我的getValidatedData函数如下所示

protected function getValidatedData(array $data)
{
    // don't format this class since the rule:in should avoid space
    $validator = Validator::make($data, [
        'ID' => 'required',
        'weight' => 'required',
    ]);
    if ($validator->fails()) {
        exit(Response::make(['message' => 'validation fails', 'errors' => $validator->errors()]));
    }
    return $data;
}
Run Code Online (Sandbox Code Playgroud)

我认为exit()不是将错误消息返回给客户端的好方法。还有什么其他方法可以直接在内部函数中将laravel响应返回给客户端。使用抛出异常?

CIR*_*CLE 6

这就是Laravel 5.4中对我有用的东西

protected function innerFunction()
{
    $params = [
        'error' => 'inner_error_code',
        'error_description' => 'inner error full description'
    ];
    response()->json($params, 503)->send();
}
Run Code Online (Sandbox Code Playgroud)

  • 在 5.5 中为我工作,但没有停止执行。我修复了添加“退出”;回应后。 (3认同)

Mar*_*łek 3

你可以做的是使用send方法,所以你可以使用:

if ($validator->fails()) {
    Response::make(['message' => 'validation fails', 'errors' => $validator->errors()])->send();
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这不是最好的解决方案,更好的方法是抛出这些数据的异常并在Handler类中添加处理它。

编辑

作为用法示例:

public function index()
{
    $this->xxx();
}

protected function xxx()
{
    \Response::make(['message' => 'validation fails', 'errors' => ['b']])->send();
    dd('xxx');
}
Run Code Online (Sandbox Code Playgroud)

假设该index方法是控制器中的方法,您将得到响应 json 并且dd('xxx');不会被执行