視圖包含服務(wù)于應(yīng)用的HTML并將應(yīng)用的控制器邏輯和表現(xiàn)邏輯進(jìn)行分離。視圖文件存放在resources/views
目錄。
下面是一個(gè)簡(jiǎn)單視圖:
<!-- 該視圖存放 resources/views/greeting.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
這個(gè)視圖存放在resources/views/greeting.php
,我們可以在全局的幫助函數(shù)view
中這樣返回它:
$app->get('/', function () {
return view('greeting', ['name' => 'James']);
});
傳遞給view
方法的第一個(gè)參數(shù)是resources/views
目錄下相應(yīng)的視圖文件的名字,第二個(gè)參數(shù)是一個(gè)數(shù)組,該數(shù)組包含了在該視圖中所有有效的數(shù)據(jù)。在這個(gè)例子中,我們傳遞了一個(gè)name
變量,在視圖中通過(guò)執(zhí)行echo
將其顯示出來(lái)。
當(dāng)然,視圖還可以嵌套在resources/views
的子目錄中,用“.”號(hào)來(lái)引用嵌套視圖,比如,如果視圖存放路徑是resources/views/admin/profile.php
,那我們可以這樣引用它:
return view('admin.profile', $data);
判斷視圖是否存在
如果需要判斷視圖是否存在,可調(diào)用不帶參數(shù)的view
之后再使用exists
方法,如果視圖在磁盤存在則返回true
:
if (view()->exists('emails.customer')) {
//
}
調(diào)用不帶參數(shù)的view
時(shí),將會(huì)返回一個(gè)Illuminate\Contracts\View\Factory
實(shí)例,從而可以調(diào)用該工廠的所有方法。
傳遞數(shù)據(jù)到視圖
在上述例子中可以看到,我們可以簡(jiǎn)單通過(guò)數(shù)組方式將數(shù)據(jù)傳遞到視圖:
return view('greetings', ['name' => 'Victoria']);
以這種方式傳遞數(shù)據(jù)的話,$data
應(yīng)該是一個(gè)鍵值對(duì)數(shù)組,在視圖中,就可以使用相應(yīng)的鍵來(lái)訪問(wèn)數(shù)據(jù)值,比如<?php echo $key; ?>
。除此之外,還可以通過(guò)with
方法添加獨(dú)立的數(shù)據(jù)片段到視圖:
$view = view('greeting')->with('name', 'Victoria');
在視圖間共享共享數(shù)據(jù)
有時(shí)候我們需要在所有視圖之間共享數(shù)據(jù)片段,這時(shí)候可以使用視圖工廠的share
方法,通常,需要在服務(wù)提供者的boot
方法中調(diào)用share
方法,你可以將其添加到AppServiceProvider
或生成獨(dú)立的服務(wù)提供者來(lái)存放它們:
<?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
/**
* 啟動(dòng)所有應(yīng)用服務(wù)
*
* @return void
*/
public function boot()
{
view()->share('key', 'value');
}
/**
* 注冊(cè)服務(wù)提供者
*
* @return void
*/
public function register()
{
//
}
}
更多建議: