在Laravel 5.1中验证API请求

时间:2015-07-07 08:55:26

标签: validation api exception-handling laravel-5.1

我正在使用laravel 5.1创建一个简单的api,在表中创建一行并返回新创建的行的id。

我能够这样做,但在验证时我不知道该怎么做。

e.g。 transaction_request表 onPause()

只需要

order_id和customer_id的验证规则

我的uri要求这是http://localhost:8000/api/v1/transactionRequests?order_id=123&customer_id=&amount=3300

请注意,未定义customer_id。用以下json返回用户。

id|order_id|customer_id|amount

请参阅消息:使用那些' \',如何解决此问题。我知道,这是因为我在我的控制器中使用以下验证方法抛出异常

{
"error": {
    "code": "GEN-WRONG-ARGS",
    "http_code": 400,
    "message": "{\"customer_id\":[\"The customer_id field is required.\"]}"
    }
}

我使用catch来处理它如下

public function validateRequestOrFail($request, array $rules, $messages = [], $customAttributes = [])
{
    $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);

    if ($validator->fails())
    {
        throw new Exception($validator->messages());
    }
}

errorWrongArgs定义如下

try {
        if(sizeof(TransactionRequest::$rules) > 0)
            $this->validateRequestOrFail($request, TransactionRequest::$rules);

    } catch (Exception $e) {

        return $this->response->errorWrongArgs($e->getMessage());

    }

我希望响应干净如下(顺便说一句,我使用的是ellipsesynergie / api-response库而不是默认的响应类,因为我使用的是chrisbjr / api-guard)

public function errorWrongArgs($message = 'Wrong Arguments')
{
    return $this->setStatusCode(400)->withError($message, self::CODE_WRONG_ARGS);
}

public function withError($message, $errorCode)
{
    return $this->withArray([
        'error' => [
            'code' => $errorCode,
            'http_code' => $this->statusCode,
            'message' => $message
        ]
    ]);
}

1 个答案:

答案 0 :(得分:0)

是的,问题在于我对$validator->messages()返回的内容的理解,它返回一个MessageBag对象,它更像是一个Json对象。 Exception()期望String消息的位置。因此,它通过将引号字符转义为\来将Json视为String。解决方法是将Json字符串传递给Exception方法,但是在我捕获之后,我将Json字符串转换为使用json_decode的数组,然后由我使用回应类。

throw new Exception($validator->messages());

return $this->response->errorWrongArgs(json_decode($e->getMessage(),true));