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代码