如何将数组传递给laravel 5.4中的@slot?

问题描述 投票:5回答:6

我试图在我的布局中使用它,我突然想到使用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
php laravel-blade laravel-5.4
6个回答
6
投票

据我所知,不可能通过@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>

5
投票

我需要同样的东西。

这可以作为暂时的解决方案,但不是最好的形式。

@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

1
投票

我可能错了,但你不能只将数据传递给组件并处理组件中的数据吗?文件显示

有时您可能需要将其他数据传递给组件。因此,您可以将数据数组作为第二个参数传递给@component指令。所有数据都将作为变量提供给组件模板:

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

处理组件中的数据而不是使用插槽?


1
投票

它是如此简单和容易地将数组发送到组件模板中,而在视图页面中没有任何@slot

view.blade.php

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

在组件php文件component \ button.php中

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

0
投票

我是怎么做到的

在任何视图中包含@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 - > Boot)

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

希望它有所帮助!


0
投票

这是一个示例组件。将项目数分配给$numberOfSlots变量,它将逐个搜索插槽块(body_1body_2body_3

因为我构建了一个表单向导,并且在" "之间定义html块太难看了所以我更喜欢@slot

零件:

<div class="component">
    @for($i = 1; $i <= $numberOfSlots; $i++)
        <div class="item">
            {{ ${"body_{$i}"} }}
        </div>
    @endfor
</div>

刀:

@component(['numberOfSlots' => 3])
    @slot('body_1')
            Dynamically created slot 1
    @endslot

    @slot('body_2')
            Dynamically created slot 2
    @endslot

    @slot('body_3')
            Dynamically created slot 3
    @endslot
@endcomponent
© www.soinside.com 2019 - 2024. All rights reserved.