使用laravel Blade嵌套视图

时间:2013-06-05 22:09:11

标签: laravel laravel-4 blade

我搜索了SO,并在Laravel文档中挖了但我不确定我是否完全理解我想做什么。

我正在使用Laravel 4.我想知道如何在其他视图中嵌套视图。

例如,我有一个基本布局..让我们称之为layout.blade.php

<html>
    <head>
      <title>{{ $title }}</title>
    </head>
    <body>
        @yield('nav')  
        @yield('content')
    </body>
</html>

接下来,我有一个名为home的页面的刀片:

@extends('layout')

@section('nav')
<p>NAVIGATION</P>
@end

@section('content')
<p>HELLO WORLD!</P>
@end

我有几种不同的导航布局,一种用于管理员,另一种用于超级用户,另一种用于普通用户。

有没有办法在section('nav')内添加其他刀片视图?

@section('nav')
// do something magical here?
@end

对于每个刀片布局,我都需要在可以重复使用多个代码段时重复导航代码。

3 个答案:

答案 0 :(得分:11)

你可以这样做

@section('nav')
  @include('another')
  @include('magical')
  @include('snippet')
@end

答案 1 :(得分:6)

另一种解决方案,如果您希望动态加载不同的子视图,可以使用View类进行嵌套。例如。你可以在路由/控制器中拥有以下内容:

return View::make('home')->nest('subnav','home/nav', array('some' => 'data'); 

然后在home.blade.php中,你可以这样做:

@extends('layout')

@section('nav')
<p>NAVIGATION</p>
{{ $subnav }}
@end

@section('content')
<p>HELLO WORLD!</p>
@end

这可以使用include和变量(@include($viewname, array('some' => 'data'))来完成,但是我会说它更干净,因为它从视图中删除逻辑,特别是如果嵌套视图并不总是相同的刀片文件。

答案 2 :(得分:0)

即使这已经很晚了,你也可以这样做:

例如。在admin.php中你可以拥有:

@extends('home')

@section('nav')
  // navigation
@endsection

@section('content')
  // admin page content
@endsection

不是说这更好或者不是我只是回答关于使用刀片嵌套视图的问题,这就是我如何嵌套我的观点。