Laravel—视图、Blade模板引擎

视图

视图包含应用的HTML代码,视图文件存放在resource/views目录

访问视图

view辅助函数能够返回视图,第一个参数为views目录下的文件名称,第二个参数可选,是一个包含在视图中有用的数据,若存在子目录,使用.来引用

Route::get('/',function()
{
    return view('welcome',['name'=>'xiaoming']);
});

View门面上的exists方法用于判断是否存在视图

View::exists(‘emails.customer)

传递数据到视图

两种方法:

return view(‘welcome’,[‘name’=>’xiaoming’]);
$view = $view(‘welcome’)->with(‘name’,’xiaoming’);

在视图之间共享数据

AppServiceProvider中或生成独立的服务提供者中添加视图门面share方法,就可以在所有视图中共享数据

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     * 
     * 启动所有应用服务
     *
     * @return void
     */
    public function boot()
    {
        View::share('key','value');
       
    }

    /**
     * Register any application services.
     * 注册服务提供者
     * 
     * @return void
     */
    public function register()
    {
        //
    }
}

Blade模板引擎

Blade视图文件使用.blade.php文件拓展并存放在resources/views目录下

数据显示

传入Blade视图的数据可以使用两个花括号包括变量来显示传递到视图的数据(即在HTML代码中使用PHP变量的方式)

{{$name}}  

在HTML中使用的所有PHP代码,都可以用这种方式来使用:

 {{time()}}  

显示存在的数据/设置默认值

两种方法:

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

显示原生代码/未转义的数据

如果要输出带HTML的文本,则应该使用显示原生代码,否则会直接把HTML代码显示出来

{!$name!}  

显示子视图

@include指令允许在一个视图中包含另一个视图,即子视图继承父视图,还可以传递额外的参数到被子视图

@include(‘view.name’,[‘some’=>’data])

模板继承

@extends指令能够指定视图继承另外一个视图
在HTML代码中,用@section@show包围的代码区域,可以继承的子视图中进行重新定义,用@yield标记单标签,可以在继承的视图里面直接定义该位置的值
继承的子视图在@section('name')@endsection之间指定替换内容,若在替换内容前加上@parent则便是添加内容
代码后面不用加;

<!-- index.blade.php -->
<html>
    <head>
        <!-- 指定标记名1 -->
        <title>@yield('title')</title>
    </head>
    <body>
        <!-- 要指定这部分的标记名2 -->
        @section('body') 
        <!-- 把这部分的内容包围起来 -->
        @show
    </body>
</html>

<!-- extends.blade.php -->
@extends('index.php')

<!-- 重写titile,即单标签1 -->
@section('title','Larevel')

<!-- 重写标签块2 -->
@section('body')
  @parent
  <!-- 这里时替换的内容 在前面加上@parent则表示追加 --> 
@endsection

路程控制

if语句

可以在视图中使用@if,@elseif,@else,@endif来构造if语句,使用方式和PHP相同
Blade模板还提供@unless指令,表示除非
此外还有@isset、``@empty`指令

@unless
...
@endunless

@empty
...
@endempty

Switch语句

@switch($i)
    @case(1)
       //...
       @break

    @case(2)
       //
       @break

    @default 
       //
@endswitch

循环

@for ($i = 0;$i < 10; $i++)
    //...
@endfor

@foreach ($users as $user)
    //...
@endforeach

@forelse ($users as $user)
   //...
@endforelse

@while()
   //...
@endwhile

还可以在@php@endphp之间直接执行一段PHP代码