### 视图渲染数据
我们经常需要将数据库中的数据显示在视图上。也可能是配置文件固定数据展示,下面让我们来看看视图渲染数据。为了简洁展示数据,删掉 `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中方式,数据转义。