Laravel 5.8 - in_array выдает ошибку: «htmlspecialchars () ожидает, что параметр 1 будет строкой, данный массив» - PullRequest
0 голосов
/ 24 января 2020

У меня есть функция в контроллере, как это:

public function convert($id) {
        $project        = ProjectMaster::findOrFail($id);
        $items          = ProjectItem::all()->where('id_project_master', $id);
        $deliveryOrder  = ProjectDeliveryOrder::where('id_project', $id)->first();
        $itemsDO        = ProjectItemDeliveryOrder::all()->where('id_deliveryorder', $deliveryOrder->id)->pluck('id_item')->toArray();

        return view('delivery-order-form-add', compact('project', 'value', 'items', 'itemsDO'));
    }

$items дать мне результат:

{
"5": {
"id": 6,
"id_project_master": 6,
"name": "Item 1",
"qty": 2,
"cost": "1,000,000",
"totalcost": "2,000,000",
"rate": "2,000,000",
"totalrate": "4,000,000",
"created_at": "2020-01-24 03:23:25",
"updated_at": "2020-01-24 03:23:25"
},
   "6": {
       "id": 7,
       "id_project_master": 6,
       "name": "Item 2",
       "qty": 2,
       "cost": "2,500,000",
       "totalcost": "5,000,000",
       "rate": "4,000,000",
       "totalrate": "8,000,000",
       "created_at": "2020-01-24 03:23:25",
       "updated_at": "2020-01-24 03:23:25"
    }
}

и $itemsDO дать мне результат:

[
6
]

Тогда у меня есть al oop, где в каждом l oop выполняется проверка, если существует in_array($this, $array) в виде лезвия, например:

@foreach ($items as $item)
<tr>
    <td class="text-right"><input type="checkbox" class="form-check-input" name="id_item[]" value="{{ $item->id }}" @if(in_array($item->id, $itemsDO)) disabled @endif></td>
</tr>
@endforeach

Эта проверка дает мне ошибку htmlspecialchars() expects parameter 1 to be string, array given. Я пишу неверный параметр или in_array не работает на блейде Laravel?

Ответы [ 3 ]

1 голос
/ 24 января 2020

Blade ожидает, что @if и @endif будут на отдельной линии. Вы можете использовать троичный IF вместо:

@foreach ($items as $item)
<tr>
    <td class="text-right"><input type="checkbox" class="form-check-input" name="id_item[]" value="{{ $item->id }}" {{ (in_array($item->id, $itemsDO)) ?  "disabled" : "" }}></td>
</tr>
@endforeach
0 голосов
/ 24 января 2020

Ваша ошибка в выражении if.

Вы должны сказать, если условие истинно echo отключить. В способе, которым вы пишете disable, является simple string, но вы должны представить его как html code.

Итак, вкратце, вы должны вызвать disable в echo function

0 голосов
/ 24 января 2020

Решено с помощью этого кода:

<td class="text-right"><input type="checkbox" class="form-check-input" name="id_item[]" value="{{ $item->id }}" @if(in_array($items[$i]->id, $itemsDO)) disabled @endif></td>

$i равно l oop с шагом

...