Передать массив в качестве атрибута в пользовательском компоненте

#laravel #laravel-blade #laravel-8 #laravel-components

Вопрос:

Я бросил вызов общему input компоненту в Laravel, подобному этому:

 //file: views/components/input.balde.php    
<input  @foreach ($attrs as $attr=>$val)
                {{ $attr }} = "{{ $val }}"
            @endforeach
            >
 

И я хотел бы использовать его следующим образом в шаблонах лезвий:

 <x-input :attrs="{{ ['type'=>'text', 'placeholder'=>"Search.."] }}" ></x-input>
 

дело в том, что когда я передаю объект массива, подобный приведенному выше примеру, он, кажется, нарушает представление, однако, когда я отправляю переменную, подобную этой:

 @php
    $attributesArray = ['type'=>'text', 'placeholder'=>"Search.."];
@endphp    
<x-input :attrs="$attributesArray" ></x-input>
 

Есть ли способ передать массив как есть без необходимости создавать переменную и отправлять ее, чтобы я не добавлял ненужную директиву @php?

Ответ №1:

Привет, если я правильно понимаю, вы хотите получить любые значения массива в строке, вы просто можете это сделать, но с помощью implode.

 <x-input :attrs="{{ implode($attributesArray , " ") }}" ></x-input>
 

и переменная $attributesArray-это просто переменная, которая будет отправлена в блейд, это массив значений ключей

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

1. Интересно, однако, почему я могу отправить переменную в качестве переменной в компоненте, но не отправить массив в качестве переменной таким же образом? И в чем разница между отправкой имени массива в качестве переменной и отправкой массива напрямую?

Ответ №2:

Попробуй это
<x-input :attrs="{!! [ 'type' => 'text', 'placeholder' => 'Search...' ] !!}" />

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

1. к сожалению, это приводит к ошибке: syntax error, unexpected '<'