Blade是Laravel框架中的模板引擎,它的设计目的是让开发者能够编写简洁、易于理解的PHP代码,同时提供了强大的模板继承和部分视图功能。在Laravel 5中,Blade被广泛用于构建Web应用程序的视图层,因为它使得视图结构更加清晰,易于维护。
在多页应用中,常常存在一些重复的内容,比如头部、底部链接或者CSS/JS文件。Blade的布局文件(layout)就能很好地解决这个问题。例如,我们可以创建一个`views/layout.blade.php`布局文件,其中包含通用的HTML结构和资源链接:
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
```
`@yield('content')`是Blade的布局占位符,用于在实际的视图文件中填充特定内容。例如,我们有一个`about.blade.php`视图文件,它继承自布局文件,并在`content`部分填充内容:
```php
@extends('layout')
@section('content')
<h1>About {{ $first }} {{ $last }}</h1>
@endsection
```
在这里,`@extends('layout')`表示`about.blade.php`使用`layout.blade.php`作为其父布局,`@section('content')`定义了一个名为`content`的段落,`@stop`或`@endsection`表示段落结束。这样,`about.blade.php`中的内容就会替换`layout.blade.php`中的`@yield('content')`。
在路由配置文件`routes.php`中,我们需要为这些视图指定控制器方法,比如:
```php
Route::get('about', 'PagesController@about');
Route::get('contact', 'PagesController@contact');
```
在对应的`PagesController.php`中,我们定义相应的返回视图的方法:
```php
public function contact() {
return view('pages.contact');
}
public function about() {
// 可以传递数据到视图
$people = ['zhang san', 'li si', 'wang wu'];
return view('pages.about', compact('people'));
}
```
Blade还支持在布局文件中添加多个`@yield`,例如添加一个`footer`占位符:
```html
...
<div class="container">
@yield('content')
</div>
@yield('footer')
</body>
</html>
```
然后在`contact.blade.php`中,我们可以定义`footer`段:
```php
@extends('layout')
@section('content')
<h1>Contact Me!</h1>
@endsection
@section('footer')
<script>
alert('Contact from script');
</script>
@endsection
```
Blade还提供了条件语句,如`@if`、`@else`、`@endif`用于条件判断,以及`@unless`(相当于`if !`),`@foreach`用于循环遍历数组。在`PagesController`的`about`方法中,我们传递了一个数组到视图,并在视图中使用`@foreach`遍历:
```php
@extends('layout')
@section('content')
<h1>People:</h1>
<ul>
@foreach($people as $person)
<li>{{ $person }}</li>
@endforeach
</ul>
@endsection
```
通过这种方式,Blade模板引擎帮助开发者更高效地处理视图逻辑,提供了一种简洁且强大的方式来组织和呈现HTML内容。在Laravel框架中,Blade与Eloquent ORM、Artisan命令行工具、服务容器等一起,构成了强大的开发工具链,使得开发者可以专注于编写优雅的代码,提高开发效率。