2015-07-07 3 views
0

Я создаю простой api, используя laravel 5.1, чтобы создать строку в таблице и вернуть идентификатор только что созданной строки.Проверка запроса API в Laravel 5.1

Я могу это сделать, но когда дело доходит до проверки, я не уверен, что делать.

например. transaction_request стол id|order_id|customer_id|amount

правила проверки для order_id и Customer_ID просто требуется

мои URI, чтобы запросить это http://localhost:8000/api/v1/transactionRequests?order_id=123&customer_id=&amount=3300

отмечают, что customer_id не определен. пользователь возвращается со следующим json.

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

Просмотреть сообщение: with the '\', как это исправить. Я знаю, это потому, что я использую следующий метод проверки в мой контроллер, который выбрасывает исключение

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()); 
    } 
} 

и я использую улов, чтобы иметь дело с этим следующим

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

    } catch (Exception $e) { 

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

    } 

errorWrongArgs определяется следующим образом

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 
     ] 
    ]); 
} 

Я хочу, чтобы ответ был чистым следующим образом (btw Я использую библиотеку ellipsesynergie/api-response, а не класс ответа по умолчанию, потому что я использую chrisbjr/api-guard)

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

'вернуть $ this-> response-> errorWrongArgs (json_decode ($ e-> GetMessage(), правда)),' Я json_decode и я получаю "customer_id": [ "поле customer_id «].] Проблема заключается в том, что сообщения хранятся в $ validator-> messages(), который является объектом MessageBag, но я не уверен, как его преобразовать в формат, подходящий для ответа json. – karmendra

+0

Тем не менее, есть ли необходимость дать такое конкретное сообщение в ответе api, могу ли я сделать с одним простым сообщением, например, «проверка не выполнена». – karmendra

ответ

0

Да, проблема была в моем понимании того, что $validator->messages() возвращается, он возвращает MessageBag объект, который больше похож на объект JSON. Где как Exception() ожидает сообщение String. Таким образом, он рассматривает Json как String, избегая символа кавычки как «Решение». Я передаю строку Json методу Exception, но после того, как я его поймаю, я преобразовываю Json String в массив с помощью json_decode, который затем берется моим . ответ класса

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

return $this->response->errorWrongArgs(json_decode($e->getMessage(),true)); 
Смежные вопросы