Laravel5.2学习笔记---Blade模板引擎简介及模板继承的使用

本文介绍Laravel框架中的Blade模板引擎及其使用方法,包括模板继承、基础语法、流程控制等内容,并展示了如何利用Blade进行视图操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Blade模板引擎及模板继承的使用
View时MVC中很重要的一部分,使用Blade模板引擎是打开Laravel中VIew的大门最重要的一步。
Blade是Laravel提供的一个既简单又强大的模板引擎
和其它流行的PHP模板引擎不一样,Blade并不限制你在视图中使用原生PHP代码
所有Blade视图页面都将被编译成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译

模板继承
一般一个网站会有头部和尾部,很多页面都有相同的头部和尾部。当然还有公共的css、js的引入,这些东西不可能每个页面都做一遍,这样做起来很浪费时间,维护起来也很头疼。如果使用一个基础页面,将这些事情都做了,其它页面继承这个页面,如果公共部分有需要修改的,只需要修改基础页面就可以了,这就是为什么使用模板继承。

基础页面代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title><!-- - @yield('title')-->
<style type="text/css">
.header{
width: 1000px;
height: 150px;
margin: 0 auto;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main{
width: 1000px;
height: 300px;
margin: 0 auto;
margin-top: 15px;
clear: both;
}

.main .sidebar{
float: left;
width: 20%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main .content{
float:right;
width: 75%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.footer{
width: 1000px;
height: 150px;
margin: 0 auto;
margin-top: 15px;
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>

这里写图片描述
在resources/views下创建一个模板文件
将刚才的代码粘贴进来,这里边一般放公用的部分。

layouts.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo - @yield('title')</title>
<style type="text/css">
.header{
width: 1000px;
height: 150px;
margin: 0 auto;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main{
width: 1000px;
height: 300px;
margin: 0 auto;
margin-top: 15px;
clear: both;
}

.main .sidebar{
float: left;
width: 20%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main .content{
float:right;
width: 75%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.footer{
width: 1000px;
height: 150px;
margin: 0 auto;
margin-top: 15px;
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>

为什么有的地方用yield,有的地方用session?
@section既可以单独显示父模板的默认内容,也可以单独显示子模板的新内容,通过@parent还可以同时显示父子模板中的内容

而@yield只能显示其中一个,子模板不定义,就用父模板默认的,子模板定义,父模板的内容会被覆盖,通过@parent也不能显示。

最大的区别就是@yield是不可扩展的,因为它在视图中只声明定义了一个视图片段,没有任何内容。@session既可以在页面视图中定义一个片段,也可以有内容,还可以被子模板扩展。

在StudentController.php中新建一个方法如下:

<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

use App\Student;//记得添加这个

class StudentController extends Controller{//一个控制器对用一个视图目录,所以在resources/views下创建一个student目录,一个方法对应一个视图文件,所以在student目录下创建一个session1文件
    public function session1(){//记得添加路由
        return view('student.session1');//也可以view('student/session1')
    }
}

session1.blade.php

@extends('layouts')   <!-- 这个文件就在views下,所以直接写上文件名就行

如果你想对继承的模板重写,可以这样

重写头部 -->
@section('header')
    @parent   <!-- 将父模板中的也输出来 -->
    header
@stop

<!-- 如果想修改yield中的内容 -->
@section('content')
    content  <!-- 注意,这个不能继承 -->
@stop

二、基础语法及include的使用

session1.blade.php
@extends('layouts')   <!-- 这个文件就在views下,所以直接写上文件名就行

如果你想对继承的模板重写,可以这样

重写头部 -->
@section('header')
    @parent   <!-- 将父模板中的也输出来 -->
    header
@stop

<!-- 如果想修改yield中的内容 -->
@section('content')
    content  <!-- 注意,这个不能继承 -->
    <!--模板中输出php变量-->
    <p>{{$name}}</p>
    <!--模板中使用php函数-->
    <p>{{time()}}</p>
    <p>{{date('Y-m-d H:i:s',time())}}</p>
    <p>{{ in_array($name,$arr) ? true : false }}</p>
    <p>{{var_dump($arr)}}</p>
    <!--原样输出,比如就想输出两个花括号加$name-->
    <p>@{{$name}}</p><!--前边加@就可以了-->

    {{--模板中的注释   这个在网页源码中都看不到这个注释--}}

    {{--引入子视图 include  前边使用模板布局可以实现引入子视图,因为有的地方不是大家都需要 ,但是,又有很多地方需要用,这个时候就需要include   现在在student下创建一个common1.blade.php--}}
    {{--引入子视图--}}
    {{--里边可以传递值--}}
    @include('student.common1', ['message' => '这是向字模板中传递的值'])
@stop

common1.blade.php
<p>commin1.blade.php页面    <br />{{$message}}</p>

这里写图片描述
三、流程控制

StudentController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

use App\Student;//记得添加这个

class StudentController extends Controller{//一个控制器对用一个视图目录,所以在resources/views下创建一个student目录,一个方法对应一个视图文件,所以在student目录下创建一个session1文件
    public function session1(){//记得添加路由

        $name = 'shulvLY1';
        $arr = array('shulvLY1', 'shulvLY2');

        $students = Student::get();
        return view('student.session1', [
            'name' => $name,
            'arr'  => $arr,
            'students' => $students
        ]);//也可以view('student/session1')
    }
}

session1.blade.php
@extends('layouts')   <!-- 这个文件就在views下,所以直接写上文件名就行

如果你想对继承的模板重写,可以这样

重写头部 -->
@section('header')
    @parent   <!-- 将父模板中的也输出来 -->
    header
@stop

<!-- 如果想修改yield中的内容 -->
@section('content')
    content  <!-- 注意,这个不能继承 -->

<!-- 
    流程控制
    1if
    2,unless
    3for
    4foreach 
-->
    <br />
    <!--if-->
    @if($name == 'shulvLY1')
        I'm shulvLy1
    @elseif($name == 'shulvLy2')
        I'm shulvLy2
    @else
        Who am I?
    @endif
    <br />
    <!--在if中也可以使用php函数-->
    @if(in_array($name, $arr))
        true
    @else
        false
    @endif
    <br />
    <!--unless可以看作是if的取反-->
    @unless($name != 'shulvLY1')
        I'm shulvLy1
    @endunless
    <br />
    <!--for-->
    <!-- @for($i=0; $i<5; $i++)
        <p> {{ $i }}</p>
    @endfor -->

    <!--foreach一般用来输出一个对象或数组-->
    @foreach($students as $student)
        <p>{{$student->name}}</p>
    @endforeach

    <!--foreach还有一个变形叫forelse-->
    @forelse($students as $student)
        <p>{{$student->name}}</p>
    @empty
        <p>这里是空的</p><!--当$students是空的,就会执行这条-->
    @endforelse
@stop

四、模板中的URL
在StudentController.blade.php中新建一个urlTest()方法

StudentController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

use App\Student;//记得添加这个

class StudentController extends Controller{
    public function session1(){//记得添加路由

        $name = 'shulvLY1';
        $arr = array('shulvLY1', 'shulvLY2');

        $students = Student::get();
        return view('student.session1', [
            'name' => $name,
            'arr'  => $arr,
            'students' => $students
        ]);//也可以view('student/session1')
    }
    public function urlTest(){//记得添加路由,起个别名'url'
        return 'urlTest';
    }
}
session1.blade.php
@extends('layouts')   <!-- 这个文件就在views下,所以直接写上文件名就行

如果你想对继承的模板重写,可以这样

重写头部 -->
@section('header')
    @parent   <!-- 将父模板中的也输出来 -->
    header
@stop

<!-- 如果想修改yield中的内容 -->
@section('content')
    content  <!-- 注意,这个不能继承 -->

<!-- 
    模板中的URL
    1,url()     通过route名称生成URL
    2,action()  通过指定控制器及方法名生成URL
    3,route()   通过路由别名生成URL 
-->
    <br />
    <a href="{{url('url')}}">url()</a><!--通过路由的名字生成--><br />
    <a href="{{action('StudentController@urlTest')}}">action()</a><br />
    <a href="{{route('url')}}">route()</a>

@stop

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值