视图
基本用法
视图包含你应用程序所用到的 HTML,它能够将控制器和应用程序逻辑在呈现逻辑中进行分离。视图被存在 resources/views
目录下。
一个简单的视图看起来可能像这样:
<!-- 视图被保存在 resources/views/greeting.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
因为这个视图被保存在 resources/views/greeting.php
,所以我们可以像这样使用全局的辅助函数 view
来返回:
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
如你所见,view
辅助函数的第一个参数会对应到 resources/views
目录内视图文件的名称;传递到 view
辅助函数的第二个参数是一个能够在视图内取用的数据数组。在这个例子中,我们传递了 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
的实例,以便你调用这个 Factory 的任意方法。
视图的数据
传递数据到视图
就像你在之前的例子看到的那样,你可以简单地传递一个数组的数据给视图:
return view('greetings', ['name' => 'Victoria']);
当你用上面这种方式传递数据时,第二个参数必须是一个键值对的数组。在视图中,你可以用相对应的键名取用值,如:<?php echo $key; ?>
;你也可以用另一个替代语法来传递一个数据数组,在 view
辅助函数使用 with
来传递额外数据给视图:
$view = view('greeting')->with('name', 'Victoria');
把数据共享给所有视图
有时候 你可能需要共享一些数据给应用程序的所有渲染视图,这时可以通过使用视图 factory 的 share
方法来完成。通常情况下,你会把这些调用 share
方法的代码放在一个服务提供者的 boot
方法内。你可以选择直接写在 AppServiceProvider
里,或是自己生成一个不同的服务提供者来放置这些代码:
<?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
/**
* 启动任何应用程序的服务。
*
* @return void
*/
public function boot()
{
view()->share('key', 'value');
}
/**
* 注册服务提供者。
*
* @return void
*/
public function register()
{
//
}
}