Я пытаюсь использовать его в своем макете и неожиданно столкнулся с идеей использования новых функций 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
Насколько я знаю, невозможно передать массив компоненту через @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>
Мне нужно то же самое.
Это работает как временное решение, но не лучшая форма для этого.
@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
Я могу ошибаться, но не могли бы вы просто передать данные компоненту и обработать их в компоненте? Документы показывают
Иногда вам может потребоваться передать дополнительные данные компоненту. По этой причине вы можете передать массив данных в качестве второго аргумента в директиву @component. Все данные будут доступны для шаблона компонента в виде переменных:
@component (‘alert’, [‘foo’ => ‘bar’])
…
@endcomponent
иметь дело с данными в компоненте вместо использования слота?
это так просто и легко отправить массив в шаблон компонента без @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))...
Как я это делаю:
Включить тег компонента @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"
Надеюсь, это поможет!