Недопустимый аргумент для foreach () Axios Laravel - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть форма Vue.js, и я отправляю форму, используя Axios. Я могу сохранить данные в моей базе данных. Однако, когда я хочу сохранить свои динамически добавленные поля ввода, я получаю это сообщение об ошибке ...

В foreach указан неверный аргумент

Проблема в том, что это не массив, но так и должно быть. Как вы можете видеть, я хотел бы отправить массив groups [] из компонента Vue в бэкэнд Laravel с Axios. Когда я console.log () команды [объект объекта], [объект объекта].

app.js

new Vue({
    el: '#regapp',

    data: {
        username: '',
        email: '',
        password: '',
        password_confirmation: '',
        teams: [
            {
                name: '',
                role: '',
                linkedin: '',
                profileimg: ''
            }
        ],
        methods: {
            onSubmit() {
                axios.defaults.headers.common["X-CSRF-TOKEN"] = document
                    .querySelector('meta[name="csrf-token"]')
                    .getAttribute("content");
                let formData = new FormData();
                formData.append('username', this.username);
                formData.append('email', this.email);
                formData.append('password', this.password);
                formData.append('password_confirmation', this.password_confirmation);
                formData.append('teams', this.teams);

                axios.post('register', formData)
                    .then(response => alert('Success'))
                    .catch(error => this.errors.record(error.response.data.errors));
            }
        }
    }
});

Controller.php

protected function create(array $data)
{
    $user = new User();
    $user->name = $data['username'];
    $user->email = $data['email'];
    $user->password = Hash::make($data['password']);
    $user->save();

    // Here I try to loop trough teams and save each of them names into db.
    if ($data['teams'][0] != NULL) {
        $format = (array)$data;
        foreach ($format['teams'] as $teams) { // The error is here
            $team = new Team();
            $team->user_id = $user->id;
            $team->tmembername = $teams->name;
            $team->save();
        }
    }

    return $user;
}

1 Ответ

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

Спасибо Хасану за помощь. Проблема заключалась в том, что this.teams является массивом объектов - он просто пытается преобразовать объект в строку, следовательно, получая [объект объекта]. Так что я не могу сделать это:

formData.append('teams', this.teams);

Мне пришлось:

var teammemb = JSON.stringify(this.teams);

Тогда:

formData.append('teams', teammemb);

В моем RegisterController.php

 $csapat = (json_decode($data['teams']));

if (is_array($csapat) || is_object($csapat)) {
 // in this contition, foreach gonna work only array or object exist


  foreach ($csapat as $teams) {
   $team = new Team();
   $team->ico_id = $ico->id;
   $team->tmembername = $teams->name;
   $team->save();
  }
}

Теперь работает.

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