У меня есть система, в которой мне нужно указать произвольное количество сотрудников с текстовым полем для каждого дня недели, где может быть введено значение «отработанные часы».
Поэтому мне нужно создать таблицу с динамическим количеством строк, и каждая строка будет содержать 7 текстовых полей. Мне просто интересно, какое лучшее соглашение использовать при назначении идентификатора этим полям, чтобы упростить итерацию, как только я получу входные данные на моем заднем конце?
Каждая строка будет иметь идентификационный номер, связанный с строкой, которая представляет идентификатор сотрудника.
Было бы замечательно иметь возможность сделать что-то вроде:
foreach($rows as $row) { $id = $row['id']; $employee = Employee::find($id); foreach($row['hoursWorked'] as $dailyHours) { $timecard = new Timecard(); $timecard->hours = $dailyHours; $employee->timecards->insert($timecard); } }
Каков наилучший способ структурирования моей формы и идентификатора моих входов на стороне HTML, чтобы сделать это максимально безболезненным?
В качестве опоры я работаю в рамках Laravel 3 в случае, когда вы открываете любые другие решения.
<input type="text" name="hoursWorked[]" />
внутренне преобразуется в массив под $_POST['hoursWorked']
. Это означает, что вы можете сделать что-то вроде этого:
<input type="text" name="hoursWorked[12345][]" /> <!-- Sunday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Monday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Tuesday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Wednesday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Thursday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Friday --> <input type="text" name="hoursWorked[12345][]" /> <!-- Saturday -->
Затем в PHP:
<?php foreach ($_POST['hoursWorked'] as $employeeId=>$dayArray) { foreach ($dayArray as $dayOfWeek=>$hoursWorked) { // $employeeId will be 12345 // $dayOfWeek will be 0, 1, 2, 3, 4, 5 ,6 // $hoursWorked will be the value of the text field } }
Я никогда не использовал структуру Laravel, но в целом я делаю это на PHP:
foreach ($employee as $key=>$e) { echo '<input type="text" name="hours[]" id="hours_'.$key.'" value="'.$e.'" />'; }
Таким образом, у вас будет массив значений часов в POST, и вы можете ссылаться на соответствующее поле по id, если вам нужно. Первое поле будет иметь id = "hours_1" и т. Д. В противном случае, если вы не хотите использовать ключ $ из запроса, вы можете сделать это:
$cntr = 1; foreach ($employee as $e) { echo '<input type="text" name="hours[]" id="hours_'.$cntr.'" value="'.$e.'" />'; $cntr++; }
Когда вы фиксируете значения в POST, у вас будет массив значений в $_POST['hours']
. Помните, что это массив с нулевым значением, но вы можете использовать цикл foreach для повторения значений.