Как передать массив в @slot в laravel 5.4?

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

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

        @section('SampleSection')

@component( 'mylayouts.partials.contentheader' )

@slot('title')
Sample Title
@endslot

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

@endcomponent

@endsection

5

Решение

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

От документация:

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

Иногда вам может потребоваться передать дополнительные данные компоненту. За
По этой причине вы можете передать массив данных в качестве второго аргумента
директива @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>
6

Другие решения

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

Я могу ошибаться, но не могли бы вы просто передать данные компоненту и обработать их в компоненте? Документы показывают

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

@component (‘alert’, [‘foo’ => ‘bar’])

@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))...
1

Как я это делаю:

Включить тег компонента @PageNav в любое представление

@PageNav([
'menus' => [
[
'title' => 'foo',
'url' => '/foo/index'
],
[
'title' => 'bar',
'url' => '/bar/page'
]
]
]) @endPageNav

Создать представление / компоненты / файл PageNav.php

@foreach ($menus as $menu)
<li class="nav-item">
<a class="nav-link" href="{{ $menu['url'] }}">{{ $menu['title'] }}</a>
</li>
@endforeach

Зарегистрировать компонент: (AppServiceProvider.php -> Загрузка)

Blade::component('components.PageNav'); // "/views/components/PageNav.php"

Надеюсь, это поможет!

0
По вопросам рекламы [email protected]