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

时间:2016-12-21 18:53:42

标签: php laravel api laravel-5 response

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

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

3 个答案:

答案 0 :(得分:6)

这在Laravel 5.4中对我有用

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

答案 1 :(得分:2)

您可以使用send方法,因此您可以使用:

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

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

修改

作为使用样本:

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

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

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

答案 2 :(得分:0)

您可以使用此方法

 public static function Validate($request ,$rolse)
{
    // validation data
    $validator = Validator::make($request->all(),$rolse);

    $errors = $validator->getMessageBag()->toArray();
    $first_error = array_key_first($errors);
    if (count($errors) > 0)
        return  'invalid input params , ' . $errors[$first_error][0];

    return false;

}

在控制器中:

   $validate = ValidationHelper::Validate($request,
        ['title' => 'required']);

    if ($validate)
         return response()->json(['message' =>'validation fails' , 'error'=> $validate], 403);