视图
最后更新于:2022-04-01 04:20:06
## 1、基本使用
视图包含服务于应用的HTML并将应用的控制器逻辑和表现逻辑进行分离。视图文件存放在`resources/views`目录。
下面是一个简单视图:
~~~
<!-- 该视图存放 resources/views/greeting.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
~~~
这个视图存放在`resources/views/greeting.php`,我们可以在全局的帮助函数`view`中这样返回它:
~~~
$app->get('/', function () {
return view('greeting', ['name' => 'James']);
});
~~~
传递给`view`方法的第一个参数是`resources/views`目录下相应的视图文件的名字,第二个参数是一个数组,该数组包含了在该视图中所有有效的数据。在这个例子中,我们传递了一个`name`变量,在视图中通过执行`echo`将其显示出来。
当然,视图还可以嵌套在`resources/views`的子目录中,用“.”号来引用嵌套视图,比如,如果视图存放路径是`resources/views/admin/profile.php`,那我们可以这样引用它:
~~~
return view('admin.profile', $data);
~~~
**判断视图是否存在**
如果需要判断视图是否存在,可调用不带参数的`view`之后再使用`exists`方法,如果视图在磁盘存在则返回`true`:
~~~
if (view()->exists('emails.customer')) {
//
}
~~~
调用不带参数的`view`时,将会返回一个`Illuminate\Contracts\View\Factory`实例,从而可以调用该工厂的所有方法。
### 1.1 视图数据
**传递数据到视图**
在上述例子中可以看到,我们可以简单通过数组方式将数据传递到视图:
~~~
return view('greetings', ['name' => 'Victoria']);
~~~
以这种方式传递数据的话,`$data`应该是一个键值对数组,在视图中,就可以使用相应的键来访问数据值,比如`<?php echo $key; ?>`。除此之外,还可以通过`with`方法添加独立的数据片段到视图:
~~~
$view = view('greeting')->with('name', 'Victoria');
~~~
**在视图间共享共享数据**
有时候我们需要在所有视图之间共享数据片段,这时候可以使用视图工厂的`share`方法,通常,需要在服务提供者的`boot`方法中调用`share`方法,你可以将其添加到`AppServiceProvider`或生成独立的服务提供者来存放它们:
~~~
<?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
/**
* 启动所有应用服务
*
* @return void
*/
public function boot()
{
view()->share('key', 'value');
}
/**
* 注册服务提供者
*
* @return void
*/
public function register()
{
//
}
}
~~~