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

时间:2017-01-28 11:17:44

标签: php laravel-blade laravel-5.4

我正试图在我的布局中使用它,我突然想到使用Laravel 5.4 @slot的新功能。

只是想知道是否可以将数组传递到插槽?

+

6 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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

答案 2 :(得分:1)

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

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

@component('alert',['foo'=&gt;'bar'])     ... @endcomponent

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

答案 3 :(得分: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))...

答案 4 :(得分:0)

我该怎么做:

在任何视图中包含@PageNav组件标记

beta = nlinfit(X, Y, @(beta, X) modelfun(beta, c, X), beta0);

创建view / components / PageNav.php文件

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

注册组件:(AppServiceProvider.php->引导)

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

希望有帮助!

答案 5 :(得分: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