视图


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()
    {
        //
    }
}