У меня есть форма, которая содержит многомерный массив полей с одинаковыми именами:
<input class="input" type="text" name="invoice_items[0][description]" value="">
<input class="input" type="text" name="invoice_items[0][amount]" value="">
<input class="input" type="text" name="invoice_items[1][description]" value="">
<input class="input" type="text" name="invoice_items[1][amount]" value="">
Может быть ноль или более invoice_items
, каждое из которых имеет description
и amount
.
На данный момент в моем шаблоне Blade есть следующий код:
@if (old('invoice_items'))
@foreach (old('invoices_items') as $invoice_item)
<input class="input" type="text" name="invoice_items[0][description]" value="{{ $invoice_item->description }}">
<input class="input" type="text" name="invoice_items[0][amount]" value="{{ $invoice_item->amount }}">
@endforeach
@else
<input class="input" type="text" name="invoice_items[0][description]" value="">
<input class="input" type="text" name="invoice_items[0][amount]" value="">
@endif
Я ожидаю, что приведенный выше код будет:
При отправке формы с правилами проверки не удалось, и существует один или несколько элементов счета-фактуры: Вывести один набор полей элемента счета-фактуры для каждого поля, которое было отправлено пользователем, с предварительно заполненными значениями (я не получил так далеко, как присоединение проверочных сообщений).
При начальной загрузке формы или при отправке пользователем нулевых элементов счета-фактуры (без «старых» элементов счета-фактуры): Печать одного набора полей формы.
Второй сценарий работает, но если я отправляю форму по крайней мере с одним элементом счета-фактуры и по крайней мере одно правило проверки не выполнено, я получаю следующую ошибку:
Invalid argument supplied for foreach()
@foreach (old('invoices_items') as $invoice_item)
Однако, если я запускаю @dump(old('invoice_items'))
, он выглядит как массив:
array:2 [▼
0 => array:2 [▼
"description" => null
"amount" => null
]
1 => array:2 [▼
"description" => null
"amount" => null
]
]
Is Есть ли способ достичь того, что я хочу, т.е. перебрать содержимое old('invoice_items')
с помощью @foreach
? Я не уверен, почему @dump
считает old('invoice_items')
массивом, а @foreach
- нет. Я проверил базовую функцию PHP foreach
, которая, как мне кажется, сводится к @foreach
и принимает выражение массива (например, возвращаемое функцией), а не переменную массива (я знаю, что есть некоторые такие функции, как end
, которые работают только с переменными вместо выражений, но foreach
не является одной из них).
Версии программного обеспечения:
laravel/framework
: 7.5.1
php -v
: PHP 7.3.11-0ubuntu0.19.10.4