刀片模板递归包括

pap*_*rce 4 php templates laravel blade laravel-4

我有一个项目数组,表示服务器上目录的文件和目录结构.

$items数组的构造如下:

Array
(
    [folder1] => Array
        (
            [folder1_1] => Array
                (
                    [0] => filenameX.txt
                    [1] => filenameY.txt
                )
        )
    [pages] => Array
        (
        )
    [0] => filename.txt
    [1] => filename1.txt
)
Run Code Online (Sandbox Code Playgroud)

我们想要的,本质<ul>上是<li>针对每个节点.

生成的HTML应该是这样的

  • 文件夹1 /
    • folder1_1 /
      • filenameX.txt
      • filenameY.txt
  • 页/
  • filename_1.txt
  • filename_2.txt

现在,我的问题与使用laravel的刀片模板引擎的嵌套包含有关.

我有list.blade.php以下内容的观点

<div class="listing">
  @include('submenu', array('items', $items))
</div>
Run Code Online (Sandbox Code Playgroud)

我把这个数组传递给它:

View::make('list')->with('items', $items)

包含的模板(submenu.blade.php)具有以下内容:

<ul>
@foreach($items as $key=>$value)
    @if (is_array($value))
        <li>{{$key}}/
        @include('submenu', array('items', $value))
        </li>
    @else
        <li>{{$value}}</li>
    @endif
@endforeach
</ul>
Run Code Online (Sandbox Code Playgroud)

我@inlude自己内部的相同模板但是使用新数据,以防它$value是一个数组(目录)

首先,这有可能吗?

如果没有,是否有另一种方法可以达到预期的效果?

TIA,

due*_*lsy 8

是的,这确实是可能的.

但是,您的包含中存在问题,您有:

@include('submenu', array('items', $value))
Run Code Online (Sandbox Code Playgroud)

它应该是:

@include('submenu', array('items' => $value))
Run Code Online (Sandbox Code Playgroud)

值得注意的是另一个隐藏的刀片状态,@each.您可以使用它而不是自己循环遍历数组,如下所示:

<ul>
    @each('item.detail', $items, 'item')
</ul>
Run Code Online (Sandbox Code Playgroud)

然后,您创建一个名为的新刀片文件,item.detail并弹出您之前在该文件中循环中的内容.它有助于清理您的视图,使其具有越来越多的嵌套循环.

当您进入新刀片文件时,该项目的数据将保留在第三个参数中,在本例中 $item