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