前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >php中Laravel之Blade模板引擎

php中Laravel之Blade模板引擎

原创
作者头像
IT工作者
发布2022-04-16 14:43:58
发布2022-04-16 14:43:58
1.8K00
代码可运行
举报
文章被收录于专栏:程序技术知识程序技术知识
运行总次数:0
代码可运行

Blade是Laravel提供的一个既简单又强大的模板引擎,Blade允许在视图中使用原生php代码,所有Blade视图页面都将被编译成原生php代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。

1.模板继承

 一个网站,往往很多界面有相同的区块,比如导航栏,底部栏,顶部栏。这些界面只有主内容区域不一样。为了提高代码的复用性,我们可以将这些相同的区块放在布局模板里,然后让其它模板去继承它,其它模板称为子模板。这样一来,子模板就可以轻松获得与布局模板一样的内容。而且,子模板还可以做适当的修改。

在resources->views目录下新建一个模板layouts.blade.php。布局模板。

代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轻松学会Laravel - @yield('title')</title>
    <style>
        .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>

解读:

@section('header')  模板的一部分。子模板可以继承,可以改变内容。

@yield('title')   模板的一部分。子模板可以继承,可以改变内容。

@yield('content',主要内容区域)    模板的一部分。子模板可以继承,可以改变内容,有默认值。

然后在当前目录下新建一个目录student,在里面写section1.blade.php,子模板。

代码语言:javascript
代码运行次数:0
复制
@extends('layouts')   //继承公共模板,如果公共模板在views下,则直接写模板的名称
@section('header')   //对header重写,要@section('header') 和@stop配对使用
   @parent   //此句把父模板的内容的header部分也输出来
  重写头部
@stop
@section('content')   //  重写yield,和section一样
  重写yield里的内容
@stop

子模板如果要对公共模板的内容做修改,则使用@section 和@stop配对。里面写子模板自己的内容。

然后在student控制器里新增一个方法,

代码语言:javascript
代码运行次数:0
复制
public function test4(){
/*模板继承*/
return view('student/section1');
}

配置好路由:Route::get('test4',['uses'=>'StudentController@test4']);

2.基础语法及inude的使用

(1)模板中输出php变量

在控制器里写:

代码语言:javascript
代码运行次数:0
复制
public function test4(){
      $name='zls';
      return view('student/section1',['name'=>$name]);
}

模板section1.blade.php里写:

  <p>{undefined{$name}}</p>     //这样就能输出了

(2)模板里调用php代码

和原生的php没有很大的区别,只是将php的标签换成了{undefined{}}而已,其它都一样。

介绍一个短语法:

<p>{undefined{$name or 'empty'}}</p>   若 $name存在则输出$name,否则输出’empty’.

(3)原样输出,加@符,这样{undefined{}}里的代码就不会解析了

  <p>@{undefined{$name or 'empty'}}</p>

 (4)模板中的注释。使用 {undefined{--    --}}。

  {undefined{-- 模板中的注释 --}}

发现这个注释查看源里不显示

 (5)引入子视图include

在student目录下新建一个common视图,写:<p>我是include</p>.

然后在section1视图里写:@include('student.common')

@include(‘目录名/视图名’)

当然也可以向子视图传值:

在common视图里写:<p>我是include{undefined{$message}}</p>.

然后在section1视图里写:@include('student.common',['message'=>'我是错误信息'])

2.流程控制

  (1)<!--if语句-->  

 使用@符号,并且要有开始和结束标签

  @if($name=='zls')

       is zls

  @elseif($name=='imooc')

       is imooc

  @else

       not

  @endif

另外if条件里面也是可以用函数的: @if(isset($name))

  (2)<!--unless语句-->    是if的取反

  @unless($name=='zls')

  @unless

 (3) <!--for语句-->

  @for ($i=0;$i<5;$i++)

     <p>{undefined{$i}}</p>

  @endfo

 (4)<!--foreach语句-->

 在student控制器里写:

 public function test4(){undefined

/*模板继承*/

$name='zls'

$students=Student::get();

    return view('student/section1',['name'=>$name,'students'=>$students]);

}

模板里写:

代码语言:javascript
代码运行次数:0
复制
  @foreach ($students as $student)

      <p>{undefined{$student->vip_name}}</p>

  @endforeach

(5)<!--forelse语句-->

代码语言:javascript
代码运行次数:0
复制
  @forelse ($students as $student)

      <p>{undefined{$student->vip_name}}</p>

  @empty

      <p>null</p>

  @endforelse

和foreach一样,只是当数组为空时,会输出null

3.模板中的URL

有3种方式生成url。

url()  路由的方式(这个最简单)

action()  控制器名+方法名

route()   路由别名的方式

具体操作:

 在student控制器里新增一个test5方法,用来测试

代码语言:javascript
代码运行次数:0
复制
public function test5(){undefined

echo "你跳转到了test5";

}

 在section1模板里写:

代码语言:javascript
代码运行次数:0
复制

<a href="{undefined{url('test5')}}">url()点击跳转到test5里(路由方式)</a>
<a href="{undefined{action('StudentController@test5')}}">
action() 点击跳转到test5里(控制器名@方法名方式
</a>
<a href="{undefined{route('url')}}">route()点击跳转到test5里( 路由别名方式)</a>

路由配置:Route::get('test5',['as'=>'url','uses'=>'StudentController@test5']);

Url访问laravel/public/test4

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档