视图包含服务于应用的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
实例,从而可以调用该工厂的所有方法。
传递数据到视图
在上述例子中可以看到,我们可以简单通过数组方式将数据传递到视图:
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()
{
//
}
}