视图


1、基本使用

视图包含服务于应用的HTML并将应用的控制器逻辑和表现逻辑进行分离。视图文件存放在resources/views目录。

下面是一个简单视图:

  1. <!-- 该视图存放 resources/views/greeting.php -->
  2. <html>
  3. <body>
  4. <h1>Hello, <?php echo $name; ?></h1>
  5. </body>
  6. </html>

这个视图存放在resources/views/greeting.php,我们可以在全局的帮助函数view中这样返回它:

  1. $app->get('/', function () {
  2. return view('greeting', ['name' => 'James']);
  3. });

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

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

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

判断视图是否存在

如果需要判断视图是否存在,可调用不带参数的view之后再使用exists方法,如果视图在磁盘存在则返回true

  1. if (view()->exists('emails.customer')) {
  2. //
  3. }

调用不带参数的view时,将会返回一个Illuminate\Contracts\View\Factory实例,从而可以调用该工厂的所有方法。

1.1 视图数据

传递数据到视图

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

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

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

  1. $view = view('greeting')->with('name', 'Victoria');

在视图间共享数据

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

  1. <?php
  2. namespace App\Providers;
  3. class AppServiceProvider extends ServiceProvider
  4. {
  5. /**
  6. * 启动所有应用服务
  7. *
  8. * @return void
  9. */
  10. public function boot()
  11. {
  12. view()->share('key', 'value');
  13. }
  14. /**
  15. * 注册服务提供者
  16. *
  17. * @return void
  18. */
  19. public function register()
  20. {
  21. //
  22. }
  23. }