Laravel学习之视图

这篇文章主要记录Laravel框架的视图部分学习。

创建视图

视图包含应用提供的HTML,将控制器/应用逻辑和展示层进行分离。视图放在resources/views目录下。

1
2
3
4
5
6
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>

该视图存放在resources/views/greeting.blade.php,可以使用全局的view辅助函数来返回:

1
2
3
4
Route::get('/',function () {
return view('greeting',['name' => 'wflytoc']);
});

view辅助函数的第一个参数对应resources/views目录中视图文件的名称,第二个参数是传递给视图的数据数组。

视图可以嵌套在resources/views目录的子目录中,.可以用来引用嵌套的视图。如果你的视图存放在resources/views/admin/profile.blade.php中,可以这样引用:

1
2
return view('admin.profile', $data);

如果需要判断视图是否存在,可以使用Viewfacade。如果视图存在的话,exists方法就会返回true

1
2
3
4
if (View::exists('emails.customer')) {
//
}

将数据传递给视图

可以向视图传递数据数组:

1
2
return view('greetings', ['name' => 'Victoria']);

以这种方式传递信息时,数据应该是键值对形式的数组。在视图中,使用对应的key来获取每个值。除此之外,还可以使用with方法向视图中单个添加数据。

1
2
return view('greeting')->with('name', 'Victoria');

有时候,需要在所有的视图中共享同一组数据,可以使用share方法。通常,share方法应该在服务提供者的boot方法中调用。

1
2
3
4
5
public function boot()
{
View::share('key', 'value');
}

View Composer

View Composer是回调或类方法,在视图被渲染的时候调用。如果视图每次被渲染的时候,想要绑定数据到上面,View Composer能够实现这样的功能。

在服务提供者中注册View Composer:

1
2
3
4
5
6
7
8
9
10
11
12
public function boot(){
// 使用基于类的Composer
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
// 使用基于闭包的Composer
View::composer('dashboard', function ($view) {
//
});
}

注册了Composer后,每次profile视图被渲染时,ProfileComposer@compose方法就会执行。

1
2
3
4
5
public function compose(View $view)
{
$view->with('count', $this->users->count());
}

可以将View composer与多个视图关联,向composer方法的第一个参数传递视图数组:

1
2
3
4
5
View::composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);

View creator和View composer相似,但是它是在视图被实例化后马上就会执行,为了注册View creator,调用creator方法。

1
2
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator')