#php #laravel #laravel-blade #laravel-8
Вопрос:
Я пытаюсь создать компонент x-select, в котором я могу передать массив параметров в качестве одного из атрибутов.
Вот create.blade.php:
<?php $list = ['Received', 'In Process', 'Repaired', 'Completed', 'Shipped', 'Waiting on Boards', 'In Route'];?>
<x-select id="progress" class="block mt-1 w-full" name="progress" :value="old('progress')" :list="$list" />
Вот компонент select.blade.php
@props(['disabled' => false])
<select {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => 'rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>
@foreach ($list as $item)
<option @if($item == $value) selected @endif>{{ $item }}</option>
@endforeach
</select>
Проблема в том, что он пытается проанализировать/распечатать :list
, когда он запускает $attributes->merge()
. Похоже, что это не так, как должно быть, так как, согласно документам Laravel 8 Blade, похоже, вы можете добавить :attribute
файл, который не печатается при запуске $attributes->merge()
. См.: https://laravel.com/docs/8.x/blade#default-merged-attributes
Если я изменю значение :list
на обычную строку, она напечатает строку при запуске $attributes->merge()
, что противоречит этим документам и делает так, что я не могу передать массив, потому что он пытается обрезать массив и терпит неудачу с этой ошибкой:
trim() expects parameter 1 to be string, array given
Комментарии:
1. Не связано:
$item
должно быть{{ $item }}
внутри лезвия в вашем<option>
2. Спасибо, я обновил свой вопрос.
Ответ №1:
Сначала вы можете упорядочить массив, используя json_encode
:
<?php $list = json_encode(['Received', 'In Process', 'Repaired', 'Completed', 'Shipped', 'Waiting on Boards', 'In Route']); ?>
Затем вы можете превратить его обратно в массив, используя json_decode
:
@foreach(json_decode($list, true) as $item)
{{-- your code here --}}
@endforeach