Laravel - Как я могу разместить массив объектов? - PullRequest
1 голос
/ 02 февраля 2020

У меня есть динамическая таблица c, где я могу добавлять и удалять строки. В каждой строке есть несколько входов, где пользователь может добавлять данные к объекту.

Прямо сейчас я жестко кодирую каждый индексный номер для имени attr. Вот так:

<input type="text" name="reports[0][title]">
<input type="text" name="reports[0][description]">
<input type="text" name="reports[1][title]">
<input type="text" name="reports[1][description]">

Можно ли сделать что-то вроде этого:

<input type="text" name="reports[][title]">
<input type="text" name="reports[][description]">
<input type="text" name="reports[][title]">
<input type="text" name="reports[][description]">

И получить запрос так же, как когда это были жестко закодированные индексы?

Мне нужно разместить несколько объектов в методе store в контроллере. Когда я получаю запрос, я хочу, чтобы данные были такими, без жесткого кодирования индексов.

"reports": [
    {
        "title": "Title 1",
        "description": "Description 1"
    },
    {
        "title": "Title 2",
        "description": "Description 2"
    }
]

Заранее спасибо.

1 Ответ

2 голосов
/ 02 февраля 2020

Вариант № 2 невозможен, что приведет к чему-то вроде этого:

{
 _token: "OFjlTsy3Jws9xW9H0cI9ARVGGNnQokLtRI6Tn478",
 reports: [
  {
     title: "title 1"
  },
  {
     description: "description 1"
  },
  {
     title: "title 2"
  },
  {
     description: "description 2"
  },
 ],
}

Поэтому при динамическом добавлении ваших полей необходимо добавлять их с номерами для каждого набора:

Допустим, это ваша форма

<form action="save-reposts" method="POST">
  <!-- Your crsf token field here -->
  <input type="text" name="reports[0][title]">
  <input type="text" name="reports[0][description]">
  <input type="text" name="reports[1][title]">
  <input type="text" name="reports[1][description]">
  <input type="submit" id="submitButton" value="Submit" />
</form>
<button id="addMoreReports"> Add more </button>

Использование jQuery может быть что-то вроде этого:

let i = 2;
$('#addMoreReports').click(function(){
   $('#submitButton').before(addFieldSet(i));
   i++;
});

function addFieldSet(index){
   return '<input type="text" name="reports[' + index + '][title]"><input type="text" name="reports[' + index + '][description]">';
}
...