我正在使用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
]
]);
}
答案 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));