2017-01-28 5 views
4

Я пытаюсь использовать его в своем макете, и я внезапно сталкиваюсь с идеей использования новых функций Laravel 5.4 @slot.Как передать массив @slot в laravel 5.4?

Просто интересно, можно ли передать массив в слот?

 @section('SampleSection') 

      @component('mylayouts.partials.contentheader') 

       @slot('title') 
        Sample Title 
       @endslot 

       @slot('indexes') 
        Pass array here // example [ 'a', 'b', 'c' ] 
       @endslot 

      @endcomponent 

     @endsection 

ответ

4

Мне нужно то же самое.

Это работает как временное решение, но не является лучшей формой для этого.

@component('component.tab.header') 
    @slot('navs', [ 
     "a" => "Pepe", 
     "b" => "Maria" 
    ]) 
@endcomponent 

EDIT:

Наконец, в моем случае, я решил сделать это:

@component('component-name') 
    @slot('slot-name') 
     Value1|Value2|Value2 
    @endslot 
@endcomponent 

А в коде компонента:

@foreach(explode('|', $slot-name) as $value) 
    The value is {{ $value }} <br/> 
@endforeach 
+0

На самом деле пытался, что один, но был с трудом ловя массив в представлениях слот. То, что я сделал, помещает еще один «@include» внутри «@component» и использует переменные параметры для работы слота. Это не очень, хотя ... –

+0

Смотрите мое новое редактирование, я думаю, что это более понятный код. –

+0

Я думаю, что ваш первоначальный ответ на самом деле лучший. Я собираюсь попробовать на этой неделе в Slack посмотреть, что это за намеченный путь, и, надеюсь, обновить документацию после того, как это станет понятным. –

1

I может быть неправильно но не могли бы вы просто передать данные компоненту и обработать это в компоненте? Документы показывают

Иногда вам может потребоваться передать дополнительные данные компоненту. По этой причине вы можете передать массив данных в качестве второго аргумента в директиву @component. Все данные будут доступны для шаблона компонента в качестве переменных:

@component ('оповещения', [ 'Foo' => 'бар']) ... @endcomponent

сделки с данные в компоненте вместо использования слота?

1

это так просто и легко массив отправить в компонент шаблона без @slot в странице просмотра

view.blade.php

@component('components.button',[ 
    'tooltipTitle'=>'buttorr33', 
    'addStyle'=>'pointer', 
    ]) 
    @endcomponent 

в компоненте PHP файла компонента \ button.php

<div class="block-buttons {{$addStyle or NULL}}" 
    {{--if set tooltip, add atributes--}} 
    @if (isset($tooltipTitle))... 
+0

Я думаю, что я пробовал это раньше, но все еще не работает. –

+0

@Nelson Melicio, отправляющий данные в виде через массив, в представлении должен быть переменным с тем же именем, что и ключ в ассоциативном массиве. ''toolitipTitle' => 'buttor33'' в файле просмотра отправит его в компонент, который устанавливается при первом параметре. Затем в этом файле компонента вы можете использовать переменную с именем $ tooltipTitle. Если он не установлен, это вызовет ошибку. – TeeZ0NE

1

насколько я знаю, это не possi чтобы передать массив в компонент через @slot. Тем не менее, это можно передать и массив непосредственно на компонент, не используя слот.

От documentation:

Передача дополнительных данных Компоненты

Иногда вам может понадобиться передать дополнительные данные к компоненту. Для по этой причине вы можете передать массив данных в качестве второго аргумента в директивой @component.Все данные будут доступны для компонента шаблона в качестве переменных:

@component('alert', ['foo' => 'bar']) 
    ... 
@endcomponent 

Так скажем, у вас есть массив данных:

$my_array = ['a', 'b', 'c'] 

Вы можете передать его компоненту, как так:

@component('mylayouts.partials.contentheader', ['my_array' => $my_array]) 
    ... 
@endcomponent 

Или вы можете просто передать его непосредственно, без использования переменной:

@component('mylayouts.partials.contentheader', ['my_array' => ['a', 'b', 'c']]) 
    ... 
@endcomponent 

Тогда в вашем файле компонента у вас будет доступ к переменной $my_array. Например, в файле contentheader.blade.php вы можете сделать это:

<ul> 
    @foreach($my_array as $value) 
     <li>{{ $value }}</li> 
    @endforeach 
</ul> 
+0

Эта работа формирует меня – omixam

Смежные вопросы