Laravel5.1 Blade模板

在laravel框架中提供了的一个模板引擎,它就是Blade。

Blade 并不限制你在视图(view)中使用原生 PHP 代码。所有 Blade 视图页面都将被编译成原生 PHP 代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何额外负担。Blade 视图文件使用 .blade.php 文件扩展名,并且一般被存放在 resourcesviews 目录。

模板的继承

我们先在resourcesviews目录下创建一个app.blade.php文件写一些HTML

<!DOCTYPE html>
<html>
    <head>
        <title>Alex DK</title>
    </head>

    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

这是一个主模板,我们可以继承它 @yield关键字代表一个可插入的内容,我们在写一个home.blade.php就会明白这其中的关系:

@extends('app')
@section('content')
    <h1>这是我们的第一个模板页面</h1>
@stop

@extends关键字代表我们将继承一个模板,这样省去了很多重复代码编写的麻烦~,上面我们在app.blade.php中声明了一个@yield 可插入内容块儿,这样我们就可以在home.blade.php中使用@section关键字来插入内容了,@section对应着@stop。

为了检验结果 我们注册一个路由来看看:

Route::get('/home', function (){
    return view('home');
});

展示数据

让我们先编写一个路由:

Route::get('/home', function (){
    // 如果要向页面传递变量 只需要多添加一个数组参数就可以。注意:我们要渲染的blade不需要写home.blade.php  只需要写home就行了 不用写后面的后缀。
    return view('home',['name'=>'DK']);
});

对应的,我们修改home.blade.php:

@extends('app')
@section('content')
    <h1>Hi {{ $name }}</h1>
@stop

注意: Blade 中的 {{ }} 表达式的返回值将被自动传递给 PHP 的 htmlentities函数进行处理,以防止 XSS 攻击。

很多JavaScript框架也使用花括号来解析一些东西,为了解决冲突可以使用'@{{}}'。

{{  }}不止可以输出传递过来的变量,还可以这样:{{ time() }} 输出PHP函数的返回值。

如果没有传递变量怎么办?

当我们解析一个不存在的变量就会报错,那么怎么办呢,你可以这样写:

{{ isset($name) ? $name : 'Default' }}

但是这样写太繁琐了,你可以在Blade中这样写,简单明了:

{{ $name or 'Alex' }}

注意:如果你想输出的数据不想被解析,可以使用{!! $any !!}

if表达式

我们可以使用一些关键字来实现流程控制:

  • @if
  • @else
  • @elseif
  • @endif
Route::get('/home/{score}', function ($score){
    return view('home',compact('score'));
});
@extends('app')
@section('content')
    @if($score>=85)
        <p>你的数学成绩是优秀</p>
    @elseif($score>=60 && $score<85)
        <p>你的数学成绩是良好</p>
    @else
        <p>你的数学成绩没有及格</p>
    @endif
@stop

循环

Blade有这几种循环:

  • @for      @endfor                     :  写法和PHP中一样
  • @foreach   @endforeach              :  最常用
  • @forelse  @empty  @endforelse   :  如果循环到空值是 进入@empty块  
  • @while      @endwhile                 :  while循环
@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>No users</p>
@endforelse

@while (true)
    <p>I'm looping forever.</p>
@endwhile

包含子视图

你可以使用 @include 指令来包含一个视图的内容,当前视图中的变量也会被共享给子视图:

<div>
  @include('shared.errors')

  <form>
  <!-- Form Contents -->
  </form>
</div>

尽管子视图会自动继承父视图中的所有数据变量,你也可以直接传递一个数组变量来添加额外的变量到子视图:

@include('view.name', ['some' => 'data'])
原文地址:https://www.cnblogs.com/Alex-sk/p/6431423.html