Blade模板引擎简介及模板继承的使用

7983次阅读 586人点赞 作者: WuBin 发布时间: 2021-06-29 17:05:13
扫码到手机查看

简介

  • blade是laravel提供的一个既简单又强大的模板引擎
  • 和其他流行的PHP模板引擎不一样,blade并不限制你在视图中使用原生PHP代码
  • 所有blade视图页面都将被编译成原生的php代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。

模板继承-目录搭建

控制器构建

在app/Http/Controllers目录下的StudentController.php文件夹中:

<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
    public function section1()
    {
        // student/section1 也可以替换成 student.section1推荐用点
        return view('student.section1');
    }
}

注意view('student.section1')等价于view('student/section1') 其意思为视图指向resources/views视图目录下的student目录中的section1.blade.php 推荐使用点替代斜线,如果视图在views目录下,那么就可以省略。

添加路由

在app/routes.php中:

Route::any('section1', [
    'uses' => 'StudentController@section1'
]);

添加后可以通过localhost/laravel/public/section1进行访问

创建视图文件

在resources/views中,创建student目录(注意,目录名需要与控制器名相一致,这里的控制器名:studentController.php

在student目录下再创建属于这个控制器的视图文件,section1.blade.php,同样,视图的命名要跟控制器中的方法名相同。

在resources/views中创建文件layouts.blade.php作为父模板文件。

模板继承-编辑模板文件

父类视图-layouts.blade.php

{{-- 这个文件一般用来放公用的部分 --}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板继承-@yield('title')</title>
    <style>
        .header {
            width: 1000px;
            height: 150px;
            margin: 0 auto;
            background: #f5f5f5;
            border: 1px solid #ddd;
        }
        .main {
            width: 1000px;
            height: 300px;
            margin: 15px auto;
            clear: both;
        }
        .sidebar {
            float: left;
            width: 20%;
            height: inherit;
            background: #f5f5f5;
            border: 1px solid #ddd;
        }
        .content {
            float: right;
            width: 75%;
            height: inherit;
            background: #f5f5f5;
            border: 1px solid #ddd;
        }
        .footer {
            width: 1000px;
            height: 150px;
            margin: 15px auto 0;
            background: #f5f5f5;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
<div class="header">
    @section('header')
        头部
    @show
</div>
<div class="main">
    <div class="sidebar">
        @section('sidebar')
            侧边栏
        @show
    </div>
    <div class="content">
        @yield('content', '主要内容区')
    </div>
</div>
<div class="footer">
    @section('footer')
        底部
    @show
</div>
</body>
</html>

编辑student/section1.blade.php

继承父模板

@extends('layouts')

@extends就是继承父类的模板,如果模板在views目录下,那么直接填入模板名即可,比如这里的父模板是layouts.blade.php,那么继承父模板直接@extends('layouts')即可。

如果要继承的模板是student/layouts.blade.php,那么@extends('student/layouts')即可。

关于添加注释

在blade模板文件中,添加注释使用:

{{--这里是注释--}}
或者
{{-- 这里是注释 --}}

但是需要特别注意,在注释中不能出现@否则会编译错误:

{{--@extends是...--}}  // 报错
{{--@ extends是...--}}  // 正确编译
{{--@-extends是...--}}  // 正确编译

修改父类视图模板中的内容

修改父视图中的内容:

@section('sidebar')
    重写sidebar中的内容
@stop

在子视图中引入父视图的内容

@section('header')
    @parent
    在原有模板中内容基础上添加的内容
@stop

@parent是将父模板中的内容也输出,不想继承父视图中的就去掉parent就可以完全进行重写

yield中的内容也可以使用section指定:

@section('content')
   content
@stop

仅仅运行父视图效果:

在子视图中继承并修改后的效果:

关于laravel中blade模板中的比如@section等作用于异同,请见我的另一篇文章

相关资料

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:blade
推荐阅读
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    8326次阅读 530人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • Vue

    盘点Vue2和Vue3的10种组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。

    3448次阅读 254人点赞 发布时间: 2022-08-19 09:40:16 立即查看
  • JS

    几个高级前端常用的API

    推荐4个前端开发中常用的高端API,分别是MutationObserver、IntersectionObserver、getComputedstyle、getBoundingClientRect、requ...

    13420次阅读 867人点赞 发布时间: 2021-11-11 09:39:54 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    12205次阅读 392人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    10562次阅读 846人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    14428次阅读 1151人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    14338次阅读 1167人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    27472次阅读 2156人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    23571次阅读 1816人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录