Проверка параметров в виде строки JSON в Laravel - PullRequest
0 голосов
/ 04 декабря 2018

Часть переднего конца

Параметры отправляются следующим образом:

Front End sending data

Запрос Laravel

class CarCreateRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        //TODO: Define authorization logic, possibly a middleware
        return true;
    }  

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'car.name' => 'present|required'
        ];
    }
}

Реальная проблема

Класс запроса всегда проверяется на false.Я проверил секцию Validating Array , но похоже, что это работает, посылая параметры следующим образом:

car[name]=Spidey Mobile

Однако мне нужно отправить эти данные в строковом виде с помощью JSON.stringify ().

Есть ли обходной путь для этого?Похоже, точечная нотация не работает, так как это строка JSON, а не массив.Я пытался изменить данные запроса до оценки, но я не нашел ничего подходящего для Laravel 5.7.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы просто должны иметь возможность переопределить метод validationData в своем запросе следующим образом:

protected function validationData()
{
    $this->merge(['car', json_decode($this->car)]); // or what ever your request value is.
    return $this->all();
}
0 голосов
/ 05 декабря 2018

Вот решение, я использовал оба метода sanitize и validator в запросе, чтобы изменить данные запроса перед его оценкой.

class CarCreateRequest extends FormRequest
{
    /**
    * Determine if the user is authorized to make this request.
    *
    * @return bool
    */
    public function authorize()
    {
        //TODO: Define authorization logic, possibly a middleware
        return true;
    }  

    public function validator($factory)
    {
    return $factory->make(
        $this->sanitize(), $this->container->call([$this, 'rules']), $this->messages()
    );
    }

    public function sanitize()
    {
        $this->merge([
            'car' => json_decode($this->input('car'), true)
        ]);
        return $this->all();
    }

    /**
    * Get the validation rules that apply to the request.
    *
    * @return array
    */
    public function rules()
    {
        return [
            'car.name' => 'present|required'
        ];
    }
}

json_decode преобразует строку JSON в массив, который может быть проверен Laravel.

...