zoukankan      html  css  js  c++  java
  • 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'])
  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/6431423.html
Copyright © 2011-2022 走看看