视图

最后更新于: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() { // } } ~~~
';