1. 为了重复的页面代码更好的管理,首先要定义需要被继承的代码;
2. 比如,我们在 views 目录下建立 public 目录建立父模板 base.blade.php;
3. 这个 base 模板主要存放主体页面的,为了更好的理解,关闭 debug 调试;
4. 然后在正常的模板区域建立一个子模板 index.blade.php,并继承 base;
@extends( 'public.base ')
5. 父模板通过@yield 设置一个可替换的变量,子模板通过@section 改变变量;
{{--@yield 参数 1 变量名,参数 2 默认值 --}}
<title>Base -- @yield( 'title ', 'no title ')</title>
{{--改变父模板的变量值 --}}
@section( 'title ', '首页')
<div class="container">
主区域
@yield( 'main ')
</div>
@section( 'main ')
<p>子区域</p>
@endsection
6. 当然,也可以设置子模板继承父模板的部分内容,具体如下:
{{--父模板 --}}
@section( 'sidebar ')
<nav>
<ol>
<li><a href="#">导航</a></li>
</ol>
</nav>
@show
{{--子模板 --}}
@section( 'sidebar ')
@parent
导航
@endsection
二.其它技巧
1. 默认变量会被自动转义,比如特殊符号&,如果不想被转义可以用如下格式: {!! $name !!}
2. 可以使用@json 直接将数组转换成 json格式,参数 2 格式化,和原生一样;
@json($list)
@json($list, JSON_PRETTY_PRINT)
3. 在 JavaScript 区域,可能也有{{name}}这种模式的操作,和模版变量冲突;
{{--加上@即可防止解析 --}}
@{{ name }}
{{--大量 JS 时,用范围方式 --}}
@verbatim
{{ name }}
@endverbatim
4. 如果想让所有模版共享一个变量,在 Providers\AppServiceProvider.php;
public function boot()
{
view()->share( 'title ', 'Laravel ');
}
<title>{{$title}}</title>
PS:补遗一下:给模版传递变量除了参数 2 的数组,也可以使用 with()方法;
view()->with( 'name ', '& ');