Если я проверяю свою форму внешнего интерфейса с помощью axios, используя опцию «data», она не проходит проверку в моем приложении для внутреннего интерфейса.

axios.post('http://example.com/', {
  'Content-Type': 'multipart/form-data',
  Accept: 'application/json',
  data: {
      email: 'email@email.com',
      password: '12345678',
    }
}).then(res => console.log(res))
  .catch(err => console.log(err));

Поэтому здесь я использую опцию «data» для проверки.

$request->validate([
        'email' => 'required|string|email',
        'password' => 'required|string'
]);

Возвращает: 422 адрес электронной почты требуется пароль требуется.

Вот как форматируется запрос:

{Content-Type: "application/json", data: {email: "email@email.com", password: "12345678"}}

Однако, если я отправляю форму таким образом с помощью axios, она проверяется, и я захожу:

'Content-Type': 'multipart/form-data',
'Accept': 'application/json',
'email': 'email@email.com',
'password': '12345678',

Итак, мой вопрос, как сказать валидатору заглянуть внутрь объекта данных?

РЕДАКТИРОВАТЬ 1: По запросу dd($request->attributes); возвращает:

ParameterBag {#53
  #parameters: []
}
0
Ezrab_ 28 Окт 2019 в 15:50

2 ответа

Лучший ответ

Это потому, что вы добавляете headers как data в свой запрос axios. Ваш запрос должен быть таким:

const headers = {
    'Accept': "application/json",
    'Content-Type': "application/json",
};

let data: {
      email: 'email@email.com',
      password: '12345678',
    };

axios.post('http://example.com/',data, {headers:headers})
            .then( (response) => {
                //do the stuff
            })
            .catch( (error) => {
                // do the stuff
            });

Note: axios функция post принимает сначала argument как url, затем как data и третье как config (headers etc), а в вашем случае вы смешиваете заголовок с данными. Вы можете прочитать больше об axios здесь

Спасибо.

2
Salman Zafar 28 Окт 2019 в 13:23

Проблема в том, зачем вам добавлять data в ваши аксиосы?

Если вы добавляете data, тогда ваша проверка должна быть такой:

$request->validate([
    'data.email' => 'required|string|email',
    'data.password' => 'required|string',
]);
0
nmfzone 28 Окт 2019 в 13:11
58591259