Blade 是由 Laravel 提供的非常简单但功能强大的模板引擎,Blade 在视图中不约束 PHP 原生代码。所有的 Blade 视图最终都会被编译成原生 PHP 代码并缓存起来直到被修改,这意味着对应用的性能而言 Blade 基本上是零开销。Blade 视图文件使用 .blade.php 文件扩展并存放在 resources/views 目录下。
从控制器到模板传参,有两种方法,一种是在加载模板的“view()”方法中传参,另一种是通过框架的“with()”函数传参,如:
public function index(){
$title = "我是标题";
$data = array(
'name'=>'姓名',
'age'=>'年龄'
);
return view('home/index', $data)->with("title",$title);
}
with()函数中只能传一个参数,上面的参数在模板中调用的格式分别为:
{{$title}}
{{$name}}
{{$age}}
用两个大括号包起来,即表示输出,因为blade模板文件.php后缀,所以也可以用原生php直接输出。
当然也可以用PHP的compact函数,把变量和数组混合到一起传参,如:
public function home(){
$title = "标题";
$data = array(
'name'=>'姓名',
'age'=>'年龄'
);
return view('home.home', compact('title', 'data'));
}
输出方法和上文提到的一样,不过这里由于$data是一个数组,所以要用数组方式输出,上面定义的参数分别为:
{{$title}}
{{$data['name']}}
{{$data['age']}}
若我们在PHP中定义了js代码,想要在blade模板中输出js脚本,如:
public function test(){
$script = "<'script>document.write('我是js代码')";
$title = "标题";
$name = null;
return view('home/test', compact('name', 'script'))->with("title", $title);
}
上面代码中的变量输出,不用再多说,如title为:
{{$title}}
不过在前端框架argular.js中,变量输出方法和laravel的blade模板引擎输出方法一样,为了避免这种冲突,larave提供了解决方法,在输出变量前加入@符,如:
@{{$title}}
这样可以连带大括号全部输出。
在后端定义了js代码后,laravel模板不会正常输出,它为防止执行恶意脚本,会把script的尖括号转换掉,这样在html页面中会直接显示javascript代码,若我们想执行js代码,格式为:
{!!$script!!}
若想判断变量是否定义或者为空,可以用模板提供的“or”或通过三元运算符进行判断,在laravel模板引擎中这样写:
“{{$name or 'name没有定义或为空'}}”
“{{isset($name) ? $name : '三元运算符'}}”
上文提到的整合为下图:
laravel模板引擎中“if”判断写法:
@if($score>60)
及格
@else
不及格
@endif
laravel模板引擎中“unless”判断写法:
@unless($score>60)
unless语法:不及格
@endunless
#除非大于60,否则都是不及格,输出相反的,注意结果会取反
laravel模板引擎中“for”循环写法:
@for($i=0;$i<=$num;$i++)
{{$i}}
@endfor
laravel模板引擎中“foreach”循环写法:
@foreach($article as $key => $val)
{{$key}}=>{{$val}}
@endforeach
laravel模板引擎中“forelse”循环写法:
forelse类似foreach,可以循环数组,但forelse要加一个@empty,判断该数组是否为空,若为空输出@empty后面的内容,需要注意的是若没有定义数组,使用forelse会报错
forelse比foreach功能多且好用,推荐项目中尽量多用
@forelse($null as $val)
{{$val}}
@empty
没有数据
@endforelse
laravel模板引擎中“while”循环写法:
@while ($num > 5)
大于5
@endwhile