Использование foreach со старым помощником в Laravel Blade - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть форма, которая содержит многомерный массив полей с одинаковыми именами:

<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

...