1)Blade模板引擎简介及模板继承的使用
定义一个父模板: laravel/resources/views/layouts.blade.php
yield:展示某个指定section的内容;在声明中只定义了一个视图片段,没有任何内容,不可扩展;
section:定义一个视图片段;既可以在页面布局中定义一个视图片段,也可以有内容,还可以被子模板扩展;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>轻松学会Laravel - @yield('title')</title>
<style>
.header {width: 1000px; height: 150px; margin: 0 auto; background: #f5f5f5; border: 1px solid #ddd;}
.main {width: 1000px; height: 300px; margin: 0 auto; margin-top: 15px; clear: both;}
.main .sidebar {float:left; width:20%; height:inherit; background: #f5f5f5; border:1px solid #ddd;}
.main .content {float:right; width:75%; height:inherit; background: #f5f5f5; border:1px solid #ddd;}
.footer {width:1000px; height:150px; margin:0 auto; margin-top: 15px; background: #f5f5f5; border:1px solid #ddd;}
</style>
</head>
<body>
<div class="header">
@section('header')
头部
@show
</div>
<div class="main">
<div class="sidebar">
@section('sidebar')
侧边栏
@show
</div>
<div class="content">
@yield('content', '主要内容')
</div>
</div>
<div class="footer">
@section('footer')
底部
@show
</div>
</body>
</html>
控制器路径: laravel/app/Http/Controllers/StudentController.php
return view('student.section1');
新建模板路径: laravel/resources/views/student/section1.blade.php
@extends('layouts') <!-- 继承第一个定义的视图。如果需要继承的模板不是设置在view目录下,有文件夹存在,则可以:@extends('文件夹名.模板名') -->
@section('header')
@parent <!-- 父模板的内容也输出 -->
header
@stop
@section('sidebar')
header
@stop
@section('content') <!-- 虽然父模板设置成 yield,但是仍用 @section() 控制 -->
content
@stop
2)基础语法及include的使用
控制器路径:laravel/app/Http/Controllers/StudentController.php
$name = 'sean';
$arr = ['sean', 'imooc'];
// return view('student/section1'); 用斜线也行
return view('student.section1', [
'name' => $name,
'arr' => $arr,
]);
模板路径:laravel/resources/views/student/section1.blade.php
@section('content')
content
<!-- 1. 模板中输出PHP变量 -->
<p>{{$name}}</p>
<!-- 2. 模板中调用PHP代码 -->
<p>{{ time() }}</p>
<p>{{ date('Y-m-d H:i:s', time())}}</p>
<p>{{ in_array($name, $arr) }}</p>
<p>{{ var_dump($arr) }}</p>
<p>{{ isset($name) ? $name : 'default' }}</p>
<!-- <p>
<?php echo isset($name) ? $name : 'default' ?>
</p> -->
<p>{{ $name1 or 'default' }}</p>
<!-- 3. 原样输出 -->
<p>@{{ $name }}</p>
{{-- 4. 模板中的注释 --}}
{{-- 5. 引入子视图 include --}}
@include('student.common1', ['message' => '我是错误信息'])
@stop
引入子视图模板路径:laravel/resources/views/student/common1.blade.php
<p>我是include {{ $message }}</p>
3)流程控制
模板路径:laravel/resources/views/student/section1.blade.php
<!-- if 流程控制 -->
@if ($name == 'sean')
I'm sean
@elseif ($name == 'imooc')
I'm imooc
@else
Who am I?
@endif
<!-- 可在流程控制里直接使用PHP函数 -->
@if (in_array($name, $arr))
true
@else
false
@endif
<!-- if 的取反 -->
@unless( $name != 'sean')
I'm sean
@endunless
<!-- for 流程控制 -->
<!-- @for ($i=0; $i < 10; $i++)
<p>{{ $i }}</p>
@endfor -->
<!-- foreach 流程控制 -->
@foreach($students as $student)
<p>{{ $student->name }}</p>
@endforeach
<!-- forelse,foreach变种,有数据则输出,没数据则empty -->
@forelse($students as $stu)
<p>{{ $stu->name }}</p>
@empty
<p>null</p>
@endforelse
4) 模板中URL
加上一条路由,路由名称为 urlTest
,路由别名为 url
,路由指向 StudentController@urlTest
Route::any('urlTest', ['as' => 'url', 'uses' => 'StudentController@urlTest']);
控制器路径:laravel/app/Http/Controllers/StudentController.php
public function section1()
{
return view('student.section1');
}
public function urlTest()
{
return 'urlTest';
}
模板路径:laravel/resources/views/student/section1.blade.php
以下超链接都会链接到:http://192.168.2.110/laravel/public/urlTest
<!-- url() 通过路由的名称生成url -->
<a href="{{ url('urlTest') }}">url()</a>
<!-- action() 通过指定控制器和方法名生成url -->
<a href="{{ action('StudentController@urlTest') }}">action()</a>
<!-- route() 通过路由的别名生成url -->
<a href="{{ route('url') }}">route()</a>
模板路径:laravel/resources/views/student/common1.blade.php
<p>我是include {{ $message }}</p>