### 視圖渲染數據
我們經常需要將數據庫中的數據顯示在視圖上。也可能是配置文件固定數據展示,下面讓我們來看看視圖渲染數據。為了簡潔展示數據,刪掉 `layout.blade.php` 中多余的代碼:
```html
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title', 'Laravel')</title>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
@yield('content')
<div class="links">
<a href="/">Home</a>
<a href="/about">about</a>
<a href="/news">News</a>
</div>
</div>
</div>
</body>
</html>
```
然后我們在路由向視圖傳遞數據:
```php
Route::get('/', function () {
$codes = [
'php',
'java',
'javascript',
'C',
'python'
];
// return view('welcome', ['codes' => $codes]);
// return view('welcome', compact('codes'));
// return view('welcome')->withCodes($codes);
// return view('welcome')->with(compact('codes'));
return view('welcome', [
'codes' => [
'php',
'java',
'javascript',
'C',
'python'
]
]);
});
```
在視圖文件中渲染數據:
```php
@extends('layout')
@section('title', 'Laravel')
@section('content')
<ul>
@foreach($codes as $code)
<li>{{ $code }}</li>
@endforeach
</ul>
@endsection
```
> Blade `{{ }}` 語句會自動調用 `PHP` 的 `htmlspecialchars` 函數防止 `XSS` 攻擊。
### 顯示未轉義數據
默認情況下,Blade `{{ }}` 語句會自動調用 PHP 的 `htmlspecialchars` 函數防止 XSS 攻擊。不想轉義的話,可以使用以下語法:
```php
@extends('layout')
@section('title', 'Laravel')
@section('content')
<ul>
@foreach($codes as $code)
{{-- <li>{{ $code }}</li> --}}
<li>{!! $code !!}</li>
@endforeach
</ul>
@endsection
```
> Blade 也能在視圖中定義注釋。但是,和 HTML 的注釋不同的是,Blade 注釋不會被包含在應用程序返回的 HTML 內。
### 總結
本節主要講解視圖數據渲染,重點理解 `Laravel` 框架在傳遞數據的5中方式,數據轉義。