使用 laravel Blade 嵌套视图
Posted
技术标签:
【中文标题】使用 laravel Blade 嵌套视图【英文标题】:Nesting views with laravel Blade 【发布时间】:2013-06-01 19:01:03 【问题描述】:我已经搜索过 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
当可以重复使用多个 sn-ps 时,对于每个刀片布局我都需要重复导航代码是没有意义的。
【问题讨论】:
【参考方案1】:你可以这样做
@section('nav')
@include('another')
@include('magical')
@include('snippet')
@end
【讨论】:
Boom...这就是我要找的东西。我认为我的语法在我测试时已经关闭了。 谢谢。我觉得这就是 React.js 受欢迎的原因,因为它的嵌套很直观。【参考方案2】:另一个解决方案,如果您希望动态加载不同的子视图,您可以使用View
类进行嵌套。例如。您可以在 Route / Controller 中包含以下内容:
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($viewname, array('some' => 'data')
) 但是我会说它更干净,因为它从视图中删除了逻辑,特别是如果您的嵌套视图并不总是相同的刀片文件。
【讨论】:
【参考方案3】:即使已经晚了,您也可以这样做:
例如。在 admin.php 中你可以有这个:
@extends('home')
@section('nav')
// navigation
@endsection
@section('content')
// admin page content
@endsection
不是说这更好与否,我只是在回答您关于使用刀片嵌套视图的问题,这就是我嵌套视图的方式。
【讨论】:
以上是关于使用 laravel Blade 嵌套视图的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 大量使用 Blade 渲染视图的访问器(修改器)
Laravel 5 - 所有模板中都可用的全局 Blade 视图变量