2017-02-07 3 views
1

Со ссылкой на эту stack question and answer я пытаюсь форматировать ответ моих валидаций ошибок в более упрощенном формате ... Таким образом, в обычае App \ Http \ Просит \ CustomRequest У меня естьФормат СформироватьЗапрос Validation Response Error

public function rules() 

{ 
    return [ 
     'amt' => 'required|numeric|min:1000', 
     'year' => 'required|numeric|min:' . date_format(new \DateTime, 'Y'), 
     'user_id' => 'required', 
     'ratio' => 'required' 
    ]; 
} 

public function response(array $errors) 
    { 
     if ($this->expectsJson()) { 
      return response()->json(['messsage'=>'Cannot Validate','errors'=> $errors]); 
     } 

     return $this->redirector->to($this->getRedirectUrl()) 
             ->withInput($this->except($this->dontFlash)) 
             ->withErrors($errors, $this->errorBag); 
    } 

/** 
    * Format the errors from the given Validator instance. 
    * 
    * @param \Illuminate\Contracts\Validation\Validator $validator 
    * @return array 
    */ 
    protected function formatErrors(Validator $validator) 
    { 
     return []; 
    } 

в моем контроллере у меня есть

/** 
    * Store a newly created resource in storage. 
    * 
    * @param \Illuminate\Http\Request $request 
    * 
    * @return Response Header 201 
    */ 
    public function store(CustomFormRequest $request) 
    { 

     $requestData = $request->all(); 
     Budget::create($requestData); 

     return response([], 201); 
    } 

по Laravel документы я просто должен «typehint» запрос. Однако мой ответ всегда.

{ "ID": "validation_failed", "сообщение": "Проверка не удалось.", "Мета": { "ошибки": { "АМТ": [{ "правило": "min.numeric », "сообщение": "The амт должна быть не менее 1000", "параметры".: [ "1000"]}]}}}

Который не имеет смысла, если я изменяя отклика. Что мне нужно, это

{ "ID": "validation_failed", "сообщение": "Validation не удалось", "ошибки": [{ "АМТ": { "сообщение": "The амт сусло должно быть не менее 1000. «}}]}

Я не уверен, что я должен делать на этом этапе. Что еще там?

+1

Только что реализована возможность переопределения вывода по умолчанию. Поэтому, если вы все еще нуждаетесь в этом, просто посмотрите в окне пакета. –

ответ

1

Боковой канал связи (IRC) показал, что Kendall использует lanin/laravel-api-exceptions. Этот пакет имеет специальный обработчик исключений, который изменяет встроенное ValidationException в Laravel в пользовательский класс исключений и обработку пользовательских выходных данных. Подсказка о том, что результат не был получен Laravel, может быть ключом meta в выводе json, Laravel этого не производит.

В этом вопросе упоминаются методы response(array $errors) и formatErrors(Validator $validator) формы FormRequest, но они не используются этим пакетом.

Результат ошибки json может быть изменен путем переопределения метода renderForApi обработчика исключаемого исключения, проверки на ValidationFailedApiException и возврата пользовательского ответа для них.

-1

Чтобы получить собственное сообщение об ошибке, я полагаю, что вы ищете метод messages. В этом методе просто верните массив.

Пример: ['fieldName.rule' => 'Custom message']

См: https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_messages

Бонус: если вы хотите, чтобы назвать имя поля также просто сделать метод attributes.

См: https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_attributes

+0

Я действительно не пытаюсь изменить текстовое сообщение, но больше структуры объекта json .... см. Обновленный вопрос – Kendall