Blade 视图文件使用 .blade.php 文件扩展名,并且一般被存放在 resources/views目录。
1.[模板继承]
<!-- Stored in resources/views/layouts/master.blade.php -->
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
@section指令正像其名字所暗示的一样是用来定义一个视图片断(section)的;
@yield指令是用来展示某个指定 section 所代表的内容的。
扩展一个页面布局模板
<!-- Stored in resources/views/child.blade.php -->
@extends('layouts.master')
@section('title', 'Page Title')
@section('sidebar')
@@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
2.[展示数据]
Route::get('greeting', function () {
return view('welcome', ['name' => 'Samantha']);
});
//展示
Hello, {{ $name }}.
//显示函数
The current UNIX timestamp is {{ time() }}.
判断是否有值
{{ isset($name) ? $name : 'Default' }}
//或者
{{ $name or 'Default' }}
默认情况下,Blade 的 {{ }} 表达式会自动通过 PHP 的 htmlentities 函数进行处理,以防止 XSS 攻击。如果你不希望自己的数据被转义,请使用如下语法:
Hello, {!! $name !!}.
3.控制结构
通过 @if、@elseif、@else和 @endif 指令可以创建 if 表达式。这些指令其实都有相对应的 PHP 表达式:
if表达式
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
@unless (Auth::check())
You are not signed in.
@endunless
循环
@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
引入子视图
<div>
@include('shared.errors')
<form>
<!-- Form Contents -->
</form>
</div>
//可以传参
@include('view.name', ['some' => 'data'])
迭代一个视图
@each('view.name', $jobs, 'job')
第一个参数是视图名字,第二个是数组,第三是数组中的一个元素
第四个参数是如果为空的时候显示的视图
@each('view.name', $jobs, 'job', 'view.empty')
4.服务的注入
@inject('metrics', 'App\Services\MetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>
5.[扩展 Blade]
下面这个实例将创建一个 @datetime($var)指令,用于格式化 $var参数:
<?php
namespace App\Providers;
use Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Blade::directive('datetime', function($expression) {
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}