Laravel FormRequest Validation: если необязательное поле не проходит проверку, измените значение на null и продолжайте - PullRequest
0 голосов
/ 31 октября 2018

Я использую Laravel 5.5 с Проверка формы запроса . Мой текущий код ниже. Это используется для проверки данных из входящего запроса.

Если обнуляемое поле не проходит проверку в запросе, я хочу, чтобы запрос продолжился и значение этого поля было равно NULL. Так, например, если count отправлено в виде строки вместо целого числа ... Я хочу сделать значение count NULL и продолжить запрос.

Возможно ли это с помощью этого FormRequest и если да, то как?

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Response;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class FieldsCheck extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'userid' => 'required|integer',
            'custom' => 'nullable|string|max:99',
            'count' => 'nullable|integer'

        ];
    }


    protected function failedValidation(Validator $validator)
    {
        // if it fails validation, is there a way to change the failing value to null here and continue with the request?
    }

}

1 Ответ

0 голосов
/ 04 ноября 2018

Пара шагов для этого.

  1. Подготовьте массив полей, для которых вы хотите изменить значение.
  2. Запустите a для каждого цикла в Validator, чтобы сопоставить поля с массивом, созданным на шаге 1.
  3. Если проверка не пройдена и совпадает с массивом, используйте $this->merge([$key => null]), чтобы перезаписать значение запроса на ноль.
  4. Если проверка не пройдена и НЕ соответствует массиву, отправьте обратно ошибку проверки, используя throw new HttpResponseException.

Ниже приведен пример кода с комментариями:

protected function failedValidation(Validator $validator)
{
    $fields_to_null = ['count', 'custom']; // array of fields that should be changed to null if failed validation
    foreach($validator->errors()->getMessages() as $key => $msg) {
        // if fails validation && key exists in the array, change the field's value null and continue
        if (in_array($key, $fields_to_null)) {
            $this->merge([$key => null]);
        } else {
            // https://laracasts.com/discuss/channels/laravel/how-make-a-custom-formrequest-error-response-in-laravel-55?page=1
            // if an error does not match a field in the array, return validation error
            throw new HttpResponseException(response()->json($msg[0]),422); 
        }
    }
}

Запрос будет продолжен до контроллера, если он не достигнет этого throw new httpResponseException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...