视图


创建视图

注:想要了解如何编写 Blade 模板?请先查看 Blade 文档

视图包含应用的 HTML 代码,并将应用的控制器逻辑和表现逻辑进行分离。视图文件存放在 resources/views 目录。下面是一个简单视图示例:

由于这个视图存放在 resources/views/greeting.php,我们可以通过辅助函数 view 像这样返回它:

正如你所看到的,传递给 view 方法的第一个参数是 resources/views 目录下相应的视图文件的名字,第二个参数是一个数组,该数组包含了在该视图中所有有效的数据。在这个例子中,我们传递了一个 name 变量,在视图中通过使用 Blade 语法将其显示出来。

当然,视图还可以存放在 resources/views 的子目录中,用“.”号来引用嵌套视图,例如,如果视图存放路径是 resources/views/admin/profile.blade.php,那我们可以这样引用它:

判断视图是否存在

如果需要判断视图是否存在,可调用 View 门面上的 exists 方法,如果视图在磁盘存在则返回 true

创建第一个有效视图

使用视图上的 first 方法可以创建给定视图数组中存在的第一个视图。这在你的应用或扩展包允许自定义或覆盖视图时很有用:

当然,也可以调用 View 门面上的 first 方法来创建:

传递数据到视图

在上述例子中可以看到,我们可以简单通过数组方式将数据传递到视图:

以这种方式传递数据的话,$data 应该是一个键值对数组,在视图中,就可以使用相应的键来访问数据值,比如 <?php echo $key; ?>。除此之外,还可以通过 with 方法添加独立的数据片段到视图:

在视图间共享数据

有时候,我们需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法,通常,需要在某个服务提供者的 boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或生成独立的服务提供者来存放这段代码逻辑:

视图 Composer

视图 Composer 是当视图被渲染时的回调函数或类方法。如果你有一些数据要在视图每次渲染时都做绑定,可以使用视图 Composer 将逻辑组织到一个单独的地方。

在本例中,首先要在某个服务提供者中注册视图 Composer,我们将会使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现,记住,Laravel 不会包含默认的视图 Composer 目录,我们可以按照自己的喜好组织其路径,例如可以创建一个 app/Http/ViewComposers 目录:

注:如果创建一个新的服务提供者来包含视图 Composer 注册,需要添加该服务提供者到配置文件 config/app.phpproviders 数组中。

现在我们已经注册了视图 Composer,每次 profile 视图被渲染时都会执行 ProfileComposer@compose 方法,接下来我们来定义该 Composer 类:

视图被渲染前,Composer 类的 compose 方法被调用,同时 Illuminate\View\View 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。

注:所有视图 Composer 都通过服务容器被解析,所以你可以在 Composer 类的构造函数中声明任何你需要的依赖。

添加 Composer 到多个视图

你可以传递视图数组作为 composer 方法的第一个参数来一次性将视图 Composer 添加到多个视图:

composer 方法还支持 * 通配符,从而允许将一个 Composer 添加到所有视图:

视图创建器

视图创建器和视图 Composer 非常类似,不同之处在于前者在视图实例化之后立即失效而不是等到视图即将渲染。使用 View 门面的 creator 方法即可注册一个视图创建器:


<< 上一篇: HTTP 响应

>> 下一篇: URL 生成