我们使用Laravel项目的artisan命令行工具先启动一下项目
D:\software\wamp64\www\laravel5>php artisan serve
我们在开发web应用当中,通常都会从数据库取出数据,然后再将数据传给视图。那么如何向视图中传递变量呢?我们以之前建好的 SiteController 控制器来举例说明,并且设置访问根目录 路由到 SiteController控制器的 index方法。
Route::get('/', 'SiteController@index');在Laravel中,向视图中传递变量 有下面几种常见的方法:
在 SiteController 控制器的index 方法中,使用with方法,把 $today变量的值复制给视图里面的 today变量:
$today = '今天是2018.7.8';
return view("sites.about")->with("today",$today);这样的 with('today', $today) 中,第一个 'today' 就是key,第二个 $today 就是值,这样我们就可以在我们的 sites/about.blade.php 中输出这个变量了:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> cuikai about <?php echo $today; ?><br> cuikai about <?= $today; ?> </body> </html>
浏览器访问: http://localhost:8000/ 地址,即可看到输出变量

其实是三种方法,只是在使用 with 的时候,变量和数组略有不同
使用with()方法 输出变量到视图一:
$name = '<span style="color:red">Nxius</span>';
return view('sites.about')->with('name', $name);使用with()方法 输出变量到视图二:
在传递的数组中:每一个key会在视图中作为变量,而 value 就作为变量的值。
$today = '今天是2018.7.8';
return view("sites.about")->with([
'first' => 'April',
'last' => 'Nixus',
'today' => $today
]);输出变量到视图三:
$data = [];
$data['first'] = 'Nixus';
$data['last'] = 'April';
$data['today'] = $today;
return view('sites.about', $data);使用compact()方法输出变量到视图四:
compact() 的字符串可以就是变量的名字,多个变量名用逗号隔开。这个时候注意更改视图的变量输出。
$first = 'April Again';
$last = 'Nixus Again';
$today = '<span style="color:red">今天是2018.7.8</span>';
return view('sites.about', compact('first', 'last', 'today'));2、Blade模板引擎的用法
Laravel里的视图依赖于 Blade 这个模板引擎,如何使用Blade模板引擎来输出变量呢?两个花括号 {{ }}
cuikai about {{ $today }}<br>
{{ $first }}需要注意的是:使用{{}}会自动使用php中的htmlspecialchars方法来转义成实体。
其实在blade引擎中, {{ $today }} 会被解析为类似 这样的输出 <?php echo $today ; ?> ,不过这里的{{ }} 符号会将数据原样输出,比如你将 $today写成这样:
$today = '<span style="color:red">今天是2018.7.8</span>';
return view("sites.about")->with("today", $today);然后在前端使用 {!! $today !!} 来输出变量,会看到类似下面这样:
cuikai about {!! $today !!}<br> 
向视图传递变量大概就是如此了。。。
再说一下Blade模板的基本用法:
上面的内容介绍了一点点blade的语法,这里我们再统一介绍blade,说说下面几个比较常用的:
@yield()
@extends()
@if() and @unless()
@foreach()
@yield() 和 @extends() 通常会结合者使用,实现我们通常所说的layouts布局:就是在web开发的过程中,我们将一些公用的部分如 header , footer 等直接放在一个视图文件中,然后在使用的使用直接继承(使用@extends) 就可以了,比如我们在 resources/views/ 文件夹之下创建一个 app.blade.php :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Laravel 5 教程</title>
<link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>
<script type='text/javascript' src="/js/all.js"></script>
</head>
<body>
<div id="wrapper">
@yield('content')
<nav class="nav-container group" id="nav-footer">
<div>
<ul class="nav container group">
<li>
<a href="/" rel="nofollow" target="_blank">Laravel 5 Blog</a>
</li>
</ul>
</div>
</nav>
</div>
</body>
</html>写上这么一些内容,其中css这个 href="/css/all.css" ,需要我们手动在 public/ 文件夹之下创建css/文件夹,并创建all.css这个文件,对于js的src="/js/all.js"也是同理,这两个文件是为了后面的页面美化而做的提前准备。
注意到@yield('content')这个语法,这里就是说,这里有一个content的内容区域,如果某个页面继承了这个app.blade.php,然后那个页面就可以动态改变@yield('content')的内容了。比如我们在articles/lists.blade.php中,我们继承一下app.blade.php:
@extends('app')
@section('content')
<h1>{!! $title !!}</h1>
<p>{{ $intro }}</p>
@endsection这里的第一行@extends('app')就是声明这个页面继承于app.blade.php,也就是我们的articles/lists.blade.php可以使用到all.css和all.js文件,然后@section('content')就是对于app.blade.php的@yield('content'),表明就是:在渲染加载articles/lists.blade.php的时候,@yield('content')这部分内容会被替换为下面的内容:
<h1>{!! $title !!}</h1>
<p>{{ $intro }}</p>
@if()通常是用于在视图中根据某些条件来判断是否该显示某些内容,比如我们可以很“无聊”地试试这样:
public function index()
{
$first = 'jelly';
$last = 'bool';
return view('articles.lists',compact('first','last'));
}在views文件中,我们使用一下@if():
@extends('app')
@section('content')
@if($first == 'jellybool')
<h1>{{ $first }}</h1>
@else
<h1>{{ $last }}</h1>
@endif
@endsection上面的@if(),还有一个可以使用的标签就是@unless(),@unless()就可以理解为 if( ! ),就是if not 这样理解就OK。
@foreach()用于循环输出变量,比如:
public function index()
{
$first = ['jelly','bool'];
return view('articles.lists',compact('first'));
}我们传一个数组给视图,然后,我们就可以使用@foreach()循环输出了:
@extends('app')
@section('content')
@foreach( $first as $name)
<h1> {{ $name }}</h1>
@endforeach
@endsection本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn