Learning laravel:Blade 模板引擎(上)

参考文档:https://d.laravel-china.org/docs/5.5/blade

上篇说视图(view),提到 Laravel 使用 Blade 模板引擎,这篇便说 Laravel 内置的 Blade 模板引擎。Blade 视图文件使用 .blade.php 作为文件扩展名,存放在 resources/views 目录。

Blade 的两个主要优点是 模板继承(inheritance ) 和 区块(sections)。

模板继承:

定义布局:

我们先定义一个「主」布局,或者也可称之为母版,它用来定义 web 应用的主体布局风格:

<!-- 文件位置 resources/views/app.blade.php -->

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>App name - @yield('title')</title>
    {{--为了更好的查看布局效果,我们在这里引入默认的css、js,主要是 bootstrap、jquery--}}
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">
    <script src="{{ asset('js/app.js') }}"></script>
</head>
<body>
    <div class="container">
        <div class="col-sm-4">
            @section('sidebar')
                这是主布局的侧边栏。
            @show
        </div>
        <div class="col-sm-8">
            @yield('content')
        </div>
    </div>
</body>
</html>

该文件包含了典型的 HTML 语法。不过,请注意 @section@yield 命令。顾名思义,@section 命令定义了内容的一个区块(section),而@yield 指令是用来显示指定部分的内容。后面再说它们的异同。

现在,我们已经定义好了这个应用程序的主布局,接下来,我们定义一个继承此布局的子页面。

继承布局

当定义子视图时,使用 Blade 提供的 @extends 命令来为子视图指定所继承的布局。使用 @section 命令将内容注入到(inject)主布局的区块(section) 中。而「主」布局中使用 @yield 的地方会显示这些子视图中的 @section 间的内容。

接着上篇,我们来修改 test/index.blade.php, 让它继承自上面的主布局:

<!-- 文件保存于 resources/views/test/index.blade.php -->

@extends('app')

@section('title', 'Page Title')

@section('sidebar')
    @parent
    <p>这将追加到主布局的侧边栏。</p>
@endsection

@section('content')
    <h1>Hello word!</h1>
    {{--这里通过对应的键获取相应的值--}}
    {{--注意:不要了忘了 $ 符号--}}
    <p>{{ $data }}</p>
@endsection

在浏览器中访问 http://learning-laravel-demo.app/test/index,查看效果。

注意 @parent 指令,使用该指令表示引用主布局中的定义的内容,在渲染时会替换为主布局中定义的内容,是为追加(append)操作; 如果不使用该指令,则会覆写(overwriting)主布局中定义的内容。这也是 @section@yield 指令的不同。

引入子视图:

你可以使用 Blade 的 @include 命令来把其他视图(一般把一些公用的视图如消息提醒、侧栏菜单等,分离出来,然后引入即可,减少代码编写量)引入当前视图,,所有在父视图的可用变量在被引入的视图中都是可用的。

使用 Blade 的 @include 指令可以在 Blade 视图中引入另一个视图。父视图可用的所有变量将提供给引入的视图:

定义一个子视图:

<!-- 文件保存于 resources/views/test/side.blade.php -->
<p>这是自定义的侧栏。</p>

然后引入:

<!-- 文件保存于 resources/views/test/index.blade.php -->
@section('sidebar')
    @parent
    <p>这将追加到主布局的侧边栏。</p>
    @include('test.side')
@endsection

在浏览器浏览查看效果。


更多内容,敬请期待!

转载请注明出处:https://www.hellocode.wang/article/learning-laravel-blade-part1

评论