Laravel пытается получить доступ к смещению массива по значению типа null

#laravel

#laravel

Вопрос:

Пытается получить доступ к смещению массива по значению типа null в контроллере

 foreach ($request->product_item_list as $xx)
  echo $request->hidden_name_[$xx] . ' ' . $request->product_unit_price_[$xx] . ' ' . $request
  ->quantity_list_[$xx] . ' ' . $request->hidden_barcode_[$xx];
  

где dd($request->product_item_list), например

 array:1 [▼
  0 => "13"
]
  

Как я могу решить проблему?
Версия PHP 7.4.6

dd($request-> all()) выглядит так

 array:14 [▼
  "_token" => "JuFDWGzK10dV00cwMaqgX4I9R7tbVLErJ11vxjYv"
  "category_salesCoffee" => "6"
  "hidden_name_12" => "alto"
  "quantity_list_12" => null
  "hidden_barcode_12" => "11120"
  "product_unit_price_12" => null
  "hidden_cost_12" => "14"
  "product_item_list" => array:1 [▼
    0 => "13"
  ]
  "hidden_name_13" => "black"
  "quantity_list_13" => "1"
  "hidden_barcode_13" => "11130"
  "product_unit_price_13" => "33"
  "hidden_cost_13" => "14"
  "product_count" => "2"
]
  

blade.php

             @foreach ($products as $item)
                <tr>
                    <td scope="row">{{ $item->id }}</td>
                    <td>
                        <input type="checkbox" name="product_item_list[]" id="product_item_list[]" value="{{$item->id}}" {{$item->quantity == 0 ? 'disabled' : ''}}>
                    </td>
                    <td id="product_name">{{$item->name}}</td>
                    <input type="hidden" name="hidden_name_{{ $item->id }}" id="hidden_name_{{ $item->id }}" value="{{$item->name}}">
                    <td>
                        <input type="number" name="quantity_list_{{ $item->id }}" id="quantity_list_{{ $item->id }}" min="{{$item->quantity == 0 ? 0: 1}}" max="{{$item->quantity}}" onkeypress="return false" {{$item->quantity == 0 ? 'disabled' : ''}}>
                    </td>
                    <td>{{ $item->barcode }}
                    </td>
                    <input type="hidden" name="hidden_barcode_{{ $item->id }}" id="hidden_barcode_{{ $item->id }}" value="{{ $item->barcode }}">
                    <td>
                        <input type="text" name="product_unit_price_{{ $item->id }}" id="product_unit_price_{{ $item->id }}" {{$item->quantity == 0 ? 'disabled' : ''}}>
                    </td>
                    <td>
                        <input type="hidden" name="hidden_cost_{{ $item->id }}" id="hidden_cost_{{ $item->id }}" value="{{ $item->cost }}">
                    </td>
                </tr>
            @endforeach
  

Комментарии:

1. итак $request->hidden_name_ , $request->product_unit_price_ , $request->quantity_list_ или тогда $request->hidden_barcode_ null

2. dd($request-> all())

3. ничто из массива, кроме product_item_list всего остального, не является просто строкой… вы пытаетесь получить доступ к индексу массива в вашем foreach, и это не массивы, и эти входные данные не существуют по имени, которое вы пытаетесь использовать

4. в вашем блейде в имени ввода необходимо добавить пример: <имя ввода=»product_item_list[]»>

Ответ №1:

Давайте сначала разберемся с ошибкой. В нем говорится, что смещение массива имеет нулевое значение. В контроллере вы запускаете цикл и добавляете значение в массив, а затем передаете массив в блейд-файл и отображаете его значение через блейд-файл.

Вы получаете эту ошибку, потому что во время цикла в контроллере по крайней мере один раз значение (или нулевое значение) не сохраняется в массиве смещений, и когда этот массив передается в блейд-файл, блейд-файл не может найти какое-либо значение при отображении этого заданного массива смещений, и, следовательно, вы получаете данную ошибку. Хотя ошибка отображается блейд-файлом, но она возникает в цикле этого заданного массива смещений в файле контроллера.

Для решения вам нужно найти, в какой итерации нулевое значение сохраняется в массиве смещений. После этого вам нужно проверить, возможно ли значение null вообще или нет (в соответствии с бизнес-логикой проекта) во время цикла цикла. Если значение null невозможно (согласно бизнес-логике проекта), то что-то не так с логикой кодирования, из-за чего значение null сохраняется в массиве. и вам нужно исправить эту логику цикла в файле контроллера, чтобы гарантировать, что в массиве не хранятся нулевые значения.

Если бизнес-логика допускает нулевое значение, вам необходимо соответствующим образом обработать массив, сначала в файле контроллера, а затем в файле блейда.

В блейд-файле вы можете применить условие «ЕСЛИ», чтобы проверить, является ли значение массива смещения нулевым или нет, и предпринять превентивные шаги перед отображением значения

Ответ №2:

У вас нет массивов входных данных. У вас есть отдельные входные данные, к имени которых просто добавлен какой-то идентификатор. Таким образом, нет имени ввода hidden_name_ , которое вы запрашиваете в запросе.

Вы можете попытаться просто извлечь их по их фактическому имени, поскольку они не являются массивами:

 $request->input('hidden_name_'. $xx)